路由系统
在django中,uri与逻辑函数的对应关系我们称之为路由系统
伪静态
伪静态是相对于静态文件来说的,例如https://www.cnblogs.com/hesujian/p/11165818.html
我们就称之为伪静态,因为他其实不是html静态页面,只是伪装成html静态页面
伪静态的好处:
1、美观(传统的问号拼接看起来比较杂乱)
2、seo(搜索引擎优化技术),搜索引擎比较喜欢收录静态页面,所以大家都做成伪静态去增加收录机会
实现伪静态以及路由分发
既然我们已经用伪静态的url去访问服务器了,那么服务器怎么拿到需要的值
比如我们把 :http://127.0.0.1:8000/up_student/?id=12&name=hua
伪装成 :http://127.0.0.1:8000/up_student/12/hua/
后台接收数据就需要用到路由分发的技术
路由分发及在后台匹配uri时,通过正则表达式的分组,把需要的值分组,再传到处理的函数中
代码:
# 1、直接通过分组接收,按顺序传值 def up_student(request,id,name): print(id,name) urlpatterns = [ url(r'^up_student/(\w+)/(\w+)', up_student), ] # 2、我们可以通过有名分组,不用按顺序也能传值 def up_student(request,name,id): print(id,name) urlpatterns = [ url(r'^up_student/(?P<id>\w+)/(?P<name>\w+)', up_student) ]
路由正则
1、$符,以什么结尾
url(r'^test/',test), # 这种在访问时在/后面加什么都可以访问 url(r'^test/$',test) # 这种就是必须/结尾才可以
2、通配
url(r'^',test)
通配会匹配所有的url,可以用作匹配不到url时返回的页面(404)
所以我们通配符必须放在最后,不然他会先匹配通配,导致原有的url无法访问
反向路由
反向路由主要是针对form表单,当我们的uri发生变化时,所有的链接也要相应的发生变化
所有有个反向路由,可以让form表单里的action跟随uri的变化而变化
后台url:设置name属性
url(r'^sdsdsdsad/',test,name="xxx")
前端form表单:action改为随后面的name变化而变化
<form action="{% url "login" %}" method="post">
django创建app
我们会把不同类型的逻辑函数和uri放到不同的文件里,这个文件就成为app
创建有两种方式
1、pycharm创建项目时创建,只能创建一个
2、命令行创建,进入到项目的路径下输入
python manage.py startapp 自定义名称
创建完的app文件中有如下就和文件
admin.py: 写和django-admin相关的配置
apps: 对app的配置
models: 数据表模型
views: 视图函数
tests: 测试
路由分组
# 先要导入include方法 from django.conf.urls import include # 总urls.py url(r'^app01/', include('app01.urls')) # 分app urls.py # 导入视图函数 from app01 import views url('^test',views.test)
函数视图
函数视图主要写一些逻辑函数,函数视图主要分为两种
1、FBV function based view 写函数处理逻辑
2、CBV class based view 通过类处理逻辑
在CBV中
url需要做些改变
url(r'^login/', views.Login.as_view()),
处理逻辑的类也需要继承View这个类
from django.views import View class Login(View): def dispatch(self, request, *args, **kwargs): super(Login, self).dispatch(request, *args, **kwargs) # 自定制逻辑 def get(self): pass def post(self): pass # 如果是get提交就进入get函数,post提交就进入post函数 # 底层走的是dispatch函数,他会根据你的提交方式分发到不同函数里 # 我们也可以重写这个方法,加入一些其他限制,例如限制ip等等
提交方式
""" 常见的几种提交方式 get :请求数据 post :提交数据 delete :删除数据 put :更新数据 patch :更新部分数据 """