一.路由系统:
第一种:url(r'^index/', views.index) 函数方式, 请求发起一个url,在views里面的index函数处理请求
第二种:url(r'^index/', views.index.as_view()),类的方式, 请求发起一个url,在views里面的indexl类处理请求
from django.views import View
class index(View):
def dispatch(self, request, *args, **kwargs):
# 调用父类中的dispatch,里面处理反射关系,我们继承父类并且可以写自己的功能,相当于装饰器
print('before')
result = super(Home,self).dispatch(request, *args, **kwargs)
print('after')
return result
def get(self,request):
"""处理get请求"""
def post(self,request):
"""处理post请求"""
第三种利用正则表达式:
1、url(r'^detail-(d+).html', views.detail),
处理函数里面
def detail(request, nid):
"""传过来几个值就写几个参数接收"""
里面nid就是传过来匹配到的值还可以这么写
def detail(request, *args, **kwargs):
""*args"""接收传过来的值
2、url(r'^detail-(?P<nid>d+)-(?P<uid>d+).html', views.detail)
以键值对的方式传递过去,这样就不应担心传过去的顺序了,同样可以利用上面的方式接收kwargs为接收的字典
二 几个viwes里面方法:
request.path_info 一个字符串,在某些 Web 服务器配置下,主机名后的 URL 部分被分成脚本前缀部分和路径信息部分。path_info 属性将始终包含路径信息部分,不论使用的Web 服务器是什么。
request.GET.get(" ") 用来获取get请求发来的数据
request.POST 用来获取post请求发来的数据
request.method 用于判断发送发送方式,
request.POST.getlist() checkbox等多选的内容
obj = request.FILES.get('fafafa') 用于获取上传的文件,利用对象的chunks()一点一点的上传
eg:
import os
file_path = os.path.join('upload', obj.name)
f = open(file_path, mode="wb")
for i in obj.chunks():
f.write(i)
f.close()
注意,FILES 只有在请求的方法为POST 且提交的<form> 带有enctype="multipart/form-data" 的情况下才会包含数据。
否则,FILES 将为一个空的类似于字典的对象。
name的用法举例
对URL路由关系进行命名, ***** 以后可以根据此名称生成自己想要的URL *****
url(r'^asdfasdfasdf/', views.index, name='i1'),
url(r'^yug/(d+)/(d+)/', views.index, name='i2'),
url(r'^buy/(?P<pid>d+)/(?P<nid>d+)/', views.index, name='i3'),
def index(request, *args, **kwargs):
from django.urls import reverse
url1 = reverse('i1') # asdfasdfasdf/
url2 = reverse('i2', args=(1,2,)) # yug/1/2/
url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
xxx.html
{% url "i1" %} # asdfasdfasdf/
{% url "i2" 1 2 %} # yug/1/2/
{% url "i3" pid=1 nid=9 %} # buy/1/9/
三、多级路由
project/urls.py
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^cmdb/', include("app01.urls")),
url(r'^monitor/', include("app02.urls")),
]
app01/urls.py
from django.conf.urls import url,include
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^login/', views.login),
]
app02/urls.py
from django.conf.urls import url,include
from django.contrib import admin
from app02 import views
urlpatterns = [
url(r'^login/', views.login),
]