02 django请求\响应相关信息,cbv\fbv,有名\无名分组
一. request请求相关信息
request 请求相关信息: request.mothod # 当前请求方法 request.path # 请求路径 request.POST # QueryDict是django加工出来的新的字典对象,其实还是继承的python的字典然后拓展的功能
request.boby # post请求方法写的数据的原始数据 b'username=root&password=123'
request.GET # 不是get请求方法携带的数据,而是网址上的查询参数数据
request.get_full_path() # 携带查询参数的路径 /index/?a=1&b=2
二.响应相关信息
from django.shortcuts import render,HttpResponse,redirect from django.http import JsonResponse render : 响应html文件数据的 HttpResponse 响应字符串数据 redirect : 重定向 JsonResponse: 响应json格式数据的
三.有名分组 and 无名分组
伪代码: ''' 请求来了之后 path = request.path import re for item in urlpatterns: if re.match('^home/',path): home() break '''
1.匹配 / 路径
url(r'^$', views.home), # 匹配根路径
2.无名分组
# 无名分组: 将匹配到的数据以位置传参的形式传递给了book函数
url: # url(r'^book/(\d+)/(\d+)/', views.book) views: def book(request,month,year): print('year>>>>',year, type(year)) # year都是字符串数据 print('month>>>>',month, type(month)) # month都是字符串数据 # select * from ... where year=year res = f"{year}--{month}--book" # var a = `${name}` # '{}'.format return HttpResponse(res) # 这个month和year会自动接收url的两个\d+ 然后传入到book函数中
3. 有名分组
有名分组: 将匹配到的数据以关键字传参的形式传递给book函数,而book的形参名称必须有一个year和一个month,位置不固定 url: url(r'^book/(?P<year>\d+)/(?P<month>\d+)/', views.book), views: def book(request,month,year): print('year>>>>',year, type(year)) # year都是字符串数据 print('month>>>>',month, type(month)) # month都是字符串数据 # select * from ... where year=year res = f"{year}--{month}--book" # var a = `${name}` # '{}'.format return HttpResponse(res)
4.注意点
# ^/book/ 错误的! 前置导航斜杠不需要自己写,django帮你做了 # 写正则时,注意,别写冲突了,不然导致后面有些路径就失效了
四 cbv and fbv
fbv:
url: url(r'login/',views.home) views: def login(request): if request.method == 'GET': return render(request,'login.html') else: username = request.POST.get('username') if username == 'laobai': return redirect('/home/') else: return HttpResponse('你不是至尊会员')
cbv:
url: url(r'^book/',views.BookView.as_view()) views: 先要引入 from django.views import View class BookView(View): def get(self,request): print('来了') return HttpResponse('book') def post(self,request): pass