2012-06-13 38 views
21

Voy a utilizar un matraz para crear una aplicación web, y parte de la aplicación implicará un subdominio (por ejemplo, usuario1.appname.org).Manejo de subdominios dinámicos en una aplicación web (Frasco)

No estoy seguro de cómo crear estos subdominios dinámicamente en la configuración del matraz o cómo implementarlos en un servidor de producción.

¿Cuál es la mejor manera de hacerlo?

Respuesta

34

Todas las construcciones de enrutamiento de Flask admiten el argumento de palabra clave subdomain (esto incluye soporte para variables de ruta).

@app.route("/", subdomain="static") 
def static_index(): 
    """Flask supports static subdomains 
    This is available at static.your-domain.tld""" 
    return "static.your-domain.tld" 

@app.route("/dynamic", subdomain="<username>") 
def username_index(username): 
    """Dynamic subdomains are also supported 
    Try going to user1.your-domain.tld/dynamic""" 
    return username + ".your-domain.tld" 
+1

¿Este trabajo se ejecuta en el servidor de prueba localhost frasco? –

+1

También me pregunto si hay una manera de probar esto localmente. He intentado agregar varias entradas al archivo de hosts. Esto no parece funcionar. –

+0

@sean ¿Cómo harías algo similar para dominios personalizados? ¿Un usuario se registra con el subdominio.example.com y luego agrega un dominio personalizado como www.mygreatsite.com? ¿Cómo manejaría el acceso a este dominio personalizado en una ruta de Flask? – Raj

38

Para complementar el post de Sean Viera, también es necesario establecer la variable SERVER_NAME config.

Documentación de http://flask.pocoo.org/docs/config/

El nombre y número de puerto del servidor. Obligatorio para el soporte de subdominio (por ejemplo, 'myapp.dev:5000') Tenga en cuenta que localhost no admite los subdominios , por lo que establecer esto en "localhost" no ayuda. Establecer un SERVER_NAME también habilita de forma predeterminada la generación de URL sin un contexto de solicitud pero con un contexto de aplicación.

Para probar localmente necesita añadir entradas a su archivo hosts, así:

127.0.0.1  cvshark.local 
127.0.0.1  robert.cvshark.local 
127.0.0.1  www.cvshark.local 
+0

No entiendo el ejemplo que dan: 'myapp.dev:5000'. ¿Myapp es el subdominio y dev el nombre de host? – compie

+0

@compie Sí, eso es correcto. –

+1

Esta es la mejor respuesta; va más allá de la documentación y resuelve las cosas más complicadas. – gwg

Cuestiones relacionadas