在 django Web 应用程序中,如何为用户提供自己的子域?
我正在使用 Django 和 Pinax 启动一个新的 Web 应用程序项目。 我希望能够为我的用户提供独特的域名,就像 Wordpress 和其他网站一样:username.wordpress.com
。 我不知道如何用 Django 来解决这个问题,因为 url 解析逻辑(在 urls.py 中)从域名后面的 url 开始。
更具体地说,将有多个用户组,每个组都有唯一的名称。 不确定这有什么不同,但我想我应该提到这一点。
有什么方法可以操纵http请求,以便URL在Django看来就像是www.domain.com/groupname
,但仍然在浏览器地址栏中显示为groupname.domain.com
?
I'm starting a new web app project using Django and Pinax. I want to be able to give my users unique domain names like Wordpress and other sites do : username.wordpress.com
. I'm not sure how to approach this with Django, since the url parsing logic (in urls.py) starts with the url AFTER the domain name.
More specifically, there will be multiple groups of users, each group having a unique name. Not sure that makes a difference, but I thought I should mention that.
Is there some way I can manipulate the http request so that the URL looks to Django as if the url were something like www.domain.com/groupname
, but still showed in the browser address bar as groupname.domain.com
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用一些自定义中间件来拦截请求并从中获取子域。 以下代码将检索子域并通过反转命名来重定向到视图网址。
将其放入应用程序的 middleware.py 文件中。
确保在 settings.py 文件中设置中间件。
确保您已在 urls.py 中命名视图
middleware.py
urls.py
注意:此代码未经测试。
重定向可能会改变URL 的外观。 如果您想避免这种情况,只需调用关联的视图,捕获其结果,然后在
HttpResponse()
中返回它。You can use some custom middleware to intercept the request and get the subdomain from it. The following code will retrieve the subdomain and redirect to a view by reversing the named url.
Put it in a middleware.py file in your app.
Make sure you set up the middleware in your settings.py file.
Make sure you've named your view in urls.py
middleware.py
urls.py
Note: this code is untested.
Redirecting can alter the URL's appearance. If you want to avoid this, simply call the associated view, capture its result, and return it in an
HttpResponse()
.您需要通过网络服务器来处理这个问题。 如果您有像...这样的 Django url
,则在网络服务器中使用重写规则将
.domain.com
映射到domain.com/users//。
如果您使用的是 Apache,则可以在此处阅读。 否则,每个网络服务器都有自己的约定,但都支持 url 重写的概念。
You need to handle this via your webserver. If you have Django urls like...
... then use rewrite rules in the webserver to map
<username>.domain.com
todomain.com/users/<username>/
.If you're using Apache, you can read up here. Otherwise, each webserver has their own conventions but all will support the notion of url rewrites.