2013-02-12 13 views
12

Flask'ta, birden çok etki alanını işleyebilen yapı uygulamak istiyorum. Ben "http://domain1.com/show/1" tarayıcıda yazdığınızda Yani, aslındaFlask'ta birden çok etki alanıyla çalışma

@app.route('<string:domain>/show/<int:id>') 
def show(domain = '', id = ''): 
    return 'Domain is ' + domain + ', ID is ' + str(id) 

gibi yönlendirme ile işlevini yürütür Ve çok önemlidir, müşterinin tarayıcısında URL yine "http://domain1.com/show/1" olmalıdır. Ve bildiğim kadarıyla, Flask'ta redirect kullanırken, URL'yi değiştirir. Böyle bir yapıyı nasıl organize etmeliyim? Teşekkürler!

cevap

21

request nesnesinin zaten bir url_root parametresi vardır. Yoksa Host başlığını kullanabilirsiniz: Eğer uygulama içinde yönlendirmek gerekiyorsa

print request.url_root # prints "http://domain1.com/" 
print request.headers['Host'] # prints "domain1.com" 

, url_root bakmak için özellik bir de köklü bile WSGI uygulama için tam yolunu, ekleriz gibi olduğu daha derin yol (örn. http://domain1.com/path/to/flaskapp'dan başlayan).

Flask'ın sizin için bir URL oluşturması için request.url_for()'u kullanmanız daha iyidir; url_root'u hesaba katacak. URL Building belgelerine bakın.

+0

Mükemmel ve bariz bir karar, teşekkürler! – user2065831

+0

Bu arada, SEO URL'lerini dinamik olarak eklemek, bunları veritabanında depolamak ve uygulamanıza rota eklemek için en iyi karar nedir? App.add_url_rule'u her seferinde yürütmemek daha kolay ve hızlı olabilir. – user2065831

+0

İçinde bir kalıp bulun ve hepsini tek bir seferde eşleştirerek * tek bir * rota kaydedin? –

0

İşte kod ithalat ile şu şekilde görünür:

import flask 

print flask.request.url_root # prints "http://domain1.com/" 
print flask.request.headers['Host'] # prints "domain1.com"