request.method 判断请求方式 8种
GET : 获取一个页面POST: 提交数据 PUT : 上传 HEAD: 不用上传就获取数据 DELETE: 删除 Request-URL 标识的 TRACE: 回显服务器收到的请求 OPTIONS: 测试服务器功能是否正常 CONNECT: 将链接改为管道方式常用 GET POST 请求 request.POST form表单提交POST请求传递的数据 获得一个{} 取值方式 [] get() request.GET URL地址上的参数 获得一个{} 取值方式 [] get()
request 相关方法
request.method -->> 判断请求方式 request.POST -->> form表单提交POST请求传递的数据 获得一个{} 取值方式 [] get() request.GET -->> URL地址上的参数 获得一个{} 取值方式 [] get() request.path_info -->> 获取当前请求的路径 不包含参数 request.get_full_path() -->> 获取当前请求的路径 含参数 request.get_host() -->> 获取请求主机的 ip地址及端口号 request.body -->> 请求体 byte类型 request.POST就是从 body 中提取的 request.COOKIES -->> 获取所有的 cookies 字典形式 request.META -->> 获取所有的HTTP头部信息 是一个字典 request.session -->> 获取一个可读又可写 的 类似字典的 对象 request.is_secure() -->> 判断请求是否安全 request.is_ajax() -->> 判断是否是 ajax 请求 request.get_signet_cookies(key,salt='盐') -->> 获取假眼的 cookies 字典形式 request.FILES -->> 上传的文件 1. enctype = 'multipart/form-data' 2. method ='post' name {% csrf_token %} 3. 文件对象的方法 chunks()
Response
1. HttpResponse('字符串') ——》 字符串 2. render(request,'模板文件名',{k1:v1}) ——》完整的页面 3. redirect(‘要跳转的地址’) ——》 重定向 响应头: Location:url 1. ret = HttpResponse(‘’) ret['Location:'] = url 4. JosnResponse({}) Content-Type : application/json 1. 序列化非字典类型时: safe=FalseJsonResponse
传递 json 类型的 数据 from django.http import JsonResponsedef json_test(request): data = {'name': 'alex', 'pwd': 'alexdsb'} return JsonResponse(data) # Content-Type: application/json # return HttpResponse(json.dumps(data), content_type='application/json') # Content-Type: text/html; charset=utf-8
返回值
导入三件套 from django.shortcuts import render, redirect, HttpResponse, reverse redirect(reverse('/index/')) 重定向 + 反向解析 def login(request): return HttpReponse('字符串') 返回一些字符串 def regist(request): return render(request,'模板的文件名',{"data":"name"}) 返回一个完整的HTML页面 def index(request): return redirect('要跳转的地址') 重定向 Location : 地址
4.CBV FBV
- FBV (function based view ) 写url和函数的对应关系 from django.shortcuts import render, redirect, HttpResponse def login(request): err = '' if request.method == 'POST': name = request.POST.get('name') pwd = request.POST.get('pwd') if name == 'root' and 'pwd' == '123': return HttpResponse('登录成功') err = '账号或密码错误' return render(request,'login.html',{'err':err})
CBV (class based view) 写url和类的对应关系
from django.views import View import time class Index(View):# 重写 父类的 dispatch 方法 计算执行时间 def dispatch(self, request, *args, **kwargs): # 操作 # start = time.time() ret = super().dispatch(request, *args, **kwargs) # end = time.time() # print('时间:{}'.format(end - start)) # 操作 return ret # GET 请求 def get(self, request): return render(request,'index.html') # POST 请求 def post(self, request): data = request.POST.get('data') print(data) return self.get(request)
CBV 的流程
CBV的流程:1. AddPub.as_view()执行 ——》 view函数2. 请求到来的时候执行view函数: 1. self = AddPub(*) 2. self.request = request 3. 执行self.dispatch(request,) ——》如果AddPub定义了dispatch方法,执行自己的,没有执行父类的 1. 判断请求方式 http_method_names 2. 允许的话: 1. 通过反射获取对应请求方式(get/post)的方法 ——》handler 3. 不允许: 1. http_method_not_allowed ——》 handler 4. 执行handler ——》 拿到HttpResponse对象