一、HttpRequest对象
服务器接收到来自客户端的请求后,会根据报文创建HttpRequest对象,传入视图的第一个参数。
HttpRequest对象在django.http模块中定义该对象的api
HttpRequest的属性
path:请求资源的路径(不包含域名)
method:请求方式(GET、POST)
encoding:字符编码
FILES:文件
HttpRequest的方法
通过get取表单中的值
request.POST.get() 获取单个值
request.POST.getlist() 获取多个值
二、类视图
类视图的书写:
1.创建一个视图类
2.此类继承View类
3.在类中书写方法
4.路由配置:path(‘user/‘, views.UserView.as_view())
class UserView(View):def get(self, request):print("GET", request.GET)return HttpResponse("这是类视图GET方法")def post(self, request):print("POST", request.POST)return HttpResponse("这是类视图POST方法")
三、文件上传及下载
在项目路径下的static下创建存储文件的文件夹,名称可随意
在settings.py配置文件路径:
MEDIA_ROOT = os.path.join(BASE_DIR, ‘static/media’)
from django.shortcuts import render, redirect, reversefrom django.http import HttpResponsefrom learn.settings import MEDIA_ROOTimport os, timedef page(request):return render(request, 'upload.html')def upload(request):# 1.得到请求文件中的数据files = request.FILES.get('file')files_name = ''.join(str(time.localtime().tm_sec).split('.')) + files.name# 2.在服务器上创建一个文件,存储上传的文件files_path = os.path.join(MEDIA_ROOT, files_name)with open(files_path, 'wb') as f:for i in files.chunks():f.write(i)return HttpResponse('上传成功')
def download(request):# 1.获取文件路径file_name = '52头像.jpg'files_name = os.path.join(MEDIA_ROOT, file_name)# 2.获取文件数据files = open(files_name, 'rb')# 3.实例化文件对象files_response = FileResponse(files)# 4.设置响应头files_response['Content-type'] = 'application/octet-stream'files_response['Content-Disposition'] = f'attachment;filename={file_name}'return files_response
四、JSON
def data(request):user_list = list(User.objects.all().values())return JsonResponse({'data': user_list}, json_dumps_params={'ensure_ascii': False})
若在浏览器访问时,出现中文乱码,可以通过json_dumps_params={‘ensure_ascii’: False}解决
五、状态保持
def handle_cookie(request):response = HttpResponse('设置cookie')# 1.设置cookieresponse.set_cookie('username', 'cxb')response.set_cookie('username', 'cxb', max_age=10) # max_age的单位为秒response.set_cookie('username', 'cxb', expires=datetime.datetime(2022, 4, 24, 20, 56)) # 指定过期时间# 2.获取cookie值cookie = request.COOKIEScookie.get('username')# 3.删除cookieresponse.delete_cookie('username')return response
1.执行makemigrations2.get()flush()3.def handle_session(request):# 1.获取账号密码username = request.POST.get('username')# 2.数据库校验# 3.状态保持request.session['username'] = usernamerequest.session.flush()return HttpResponse('保持')4.设置过期时间def handle_cookie(request):request.session.set_expiry(10) # 单位是秒request.session.set_expiry(datetime.datetime(2022, 4, 24, 20, 56)10) # 单位是秒return HttpResponse('保持')
