新建一个django项目,然后利用nginx和uwsgi解析到我需要的二级域名就好了,但是这个新网站的数据是不变的,也就是说还要使用之前的数据库,可这样跟以前就是两个项目,我不能直接import之前的models,而数据库又比较大复杂,重新建库不现实,我也可以直接使用MySQldb,就像这样:
import MySQLdb def book_list(request): db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost') cursor = db.cursor() cursor.execute('SELECt name FROM books ORDER BY name') names = [row[0] for row in cursor.fetchall()] db.close() return render_to_response('book_list.html', {'names': names})
但是考虑了一下这样太不方便了,每次都要连接查询,不合适我的需求。
又在网上找了半天,幸好看到有人说django-host,很是符合,接下来记录一下具体使用过程:
安装django的第三方扩展包django-hosts的安装使用,github地址
pip install django-hosts django manage.py startapp api #域名api.example.com django manage.py startapp beta #域名beta.example.com配置
在项目settins.py的同级目录下新建文件hosts.py:
from django_hosts import patterns, host host_patterns = patterns('path.to', host(r'api', 'api.urls', name='api'), host(r'beta', 'beta.urls', name='beta'), )
打开项目setting.py,
1,在INSTALLED_APPS添加:'django_hosts' 2,在MIDDLEWARE添加: 'django_hosts.middleware.HostsRequestMiddleware' ...... 'django_hosts.middleware.HostsRequestMiddleware' #要在middleware最开始和最后都添加 3,在ROOT_URLCONF后添加: ROOT_HOSTCONF = '项目名.hosts' DEFAULT_HOST='api(或者beta)' #这是设置的默认域名,即在未匹配到正确的二级域名时,默认跳转到此,但这必须是在host.py中设置好的才能找到。 PARENT_HOST = 'example.com' #在呈现的URL的域部分附加一个默认域名
接下来处理各个app的url,打开项目的urls.py:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('www.urls', namespace='www')), path('api/', include('api.urls', namespace='api')), path('beta/', include('beta.urls', namespace='beta')), ]
api的urls.py:
from django.urls import path from .views import index app_name = 'api' urlpatterns = [ path('', index, name='index'), ]
beta的urls.py:
from django.urls import path from .views import index app_name = 'beta' urlpatterns = [ path('', index, name='index'), ]配置nginx
找到nginx的配置文件添加:
server { listen 80; server_name api.example.com; location / { proxy_pass http://127.0.0.1:8080/; } } server { listen 80; server_name beta.example.com; location / { proxy_pass http://127.0.0.1:8080/; } }
保存后重新载入:
nginx -s reload
uwsgi还使用之前的即可,无需更新。
html问题使用了django-hosts后html会报错:
使用Django的URL template tag会报错: u'xxx' is not a registered namespace 所以我直接用具体的url来指向就好了,避免错误。
查到一篇文章,链接,是这样解决的:
{#进入BLOG列表#} 进入BLOG列表(django-hosts) 注意:任何与该App有关的用过host_url的模板中,都不能出现Django中的url
但是我试了没成功,可能哪里有错误,就直接用url了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)