1.在创建好虚拟环境之后,使用:
django-admin startproject my_project
会自动的生成一个工程目录如下:
settings.py 是项目的整体配置文件。
urls.py 是项目的URL配置文件。
wsgi.py 是项目与WSGI兼容的Web服务器入口。
manage.py 是项目管理文件,通过它管理项目。
可以直接使用:python manage.py runserver 【ip:port】来执行。
2.创建子应用:一个功能模块一个子应用。
创建:在doc窗口输入:前提先进入到manage.py文件所在的目录,然后执行下面命令
python manage.py startproject users(子应用名称)
miggrations:数据库迁移历史文件。
admin.py:文件跟网站的后台管理站点配置相关。
apps.py:保存子应用的配置信息
models.py:保存数据库模型类
tests.py:用于开发测试用例,编写单元测试
views:编写视图函数
urls.py:手动添加的,用于url路由
注意:在创建完子应用之后,需要注册安装才能使用。在工程配置文件setting.py中,INSTALL_APPS中注册路径
3.APP应用的配置
每个应用中都包含了apps.py文件,在创建时会默认写入一个配置类,APPConfig.name属性表示这个配置类(Userconfig)是加载Users这个应用的。APPConfig.verbose_name给它一个直观的名字在Admin.py管理站点中显示。
4.创建视图:和flask一样都是在views.py中创建。
5.定义路由
1.为了保证每个子应用的相对独立,可以在每个子应用中新建一个urls.py文件用于保存该子应用的路由,在users/urls.py中定义路由信息。然后在主路由文件my_django.py中包含各子应用的子路由数据。
2.添加完成之后还需要在总工程my_django/urls中添加子应用的路由
再次启动程序:python manage.py runserver
然后访问:127.0.0.1:8000/users/index
7。路由定义位置:除了在子应用中新建urls.py文件,定义子应用的路由之外,还可以在总路由中直接定义,不需要子应用的urls.py文件
8.路由解析顺序:需要注意定义路由的顺序,避免出现屏蔽效应。
从主路由文件中的urlpatterns列表中以由上至下的顺序查找对应路由规则,如果发现规则为include包含,则再进入被包含的urls中的urlpatterns列表由上至下进行查询。
值得关注的由上至下的顺序,有可能会使上面的路由屏蔽掉下面的路由,带来非预期结果。如:
urlpatterns = [ url(r'^say', views.say), url(r'^sayhello', views.sayhello), ]
即使访问sayhello/路径,预期应该进入sayhello视图执行,但实际优先查找到了say路由规则也与sayhello/路径匹配,实际进入了say视图执行。
在定义路由的时候,可以为路由命名,方便查找特定视图的具体路径信息。
1) 在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间,如
url(r'^users/', include('users.urls', namespace='users')),
命名空间表示,凡是users.urls中定义的路由,均属于namespace指明的users名下。
命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。
2) 在定义普通路由时,可以使用name参数指明路由的名字,如
urlpatterns = [
url(r'^index/$', views.index, name='index'),
url(r'^say', views.say, name='say'),
]
使用reverse函数,可以根据路由名称,返回具体的路径,如:
from django.core.urlresolvers import reverse # 注意导包路径
def index(request):
return HttpResponse("hello the world!")
def say(request):
url = reverse('users:index') # 返回 /users/index/
print(url)
return HttpResponse('say')