一、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())

  1. class UserView(View):
  2. def get(self, request):
  3. print("GET", request.GET)
  4. return HttpResponse("这是类视图GET方法")
  5. def post(self, request):
  6. print("POST", request.POST)
  7. return HttpResponse("这是类视图POST方法")

三、文件上传及下载

在项目路径下的static下创建存储文件的文件夹,名称可随意
在settings.py配置文件路径:
MEDIA_ROOT = os.path.join(BASE_DIR, ‘static/media’)

  1. from django.shortcuts import render, redirect, reverse
  2. from django.http import HttpResponse
  3. from learn.settings import MEDIA_ROOT
  4. import os, time
  5. def page(request):
  6. return render(request, 'upload.html')
  7. def upload(request):
  8. # 1.得到请求文件中的数据
  9. files = request.FILES.get('file')
  10. files_name = ''.join(str(time.localtime().tm_sec).split('.')) + files.name
  11. # 2.在服务器上创建一个文件,存储上传的文件
  12. files_path = os.path.join(MEDIA_ROOT, files_name)
  13. with open(files_path, 'wb') as f:
  14. for i in files.chunks():
  15. f.write(i)
  16. return HttpResponse('上传成功')
  1. def download(request):
  2. # 1.获取文件路径
  3. file_name = '52头像.jpg'
  4. files_name = os.path.join(MEDIA_ROOT, file_name)
  5. # 2.获取文件数据
  6. files = open(files_name, 'rb')
  7. # 3.实例化文件对象
  8. files_response = FileResponse(files)
  9. # 4.设置响应头
  10. files_response['Content-type'] = 'application/octet-stream'
  11. files_response['Content-Disposition'] = f'attachment;filename={file_name}'
  12. return files_response

四、JSON

  1. def data(request):
  2. user_list = list(User.objects.all().values())
  3. return JsonResponse({'data': user_list}, json_dumps_params={'ensure_ascii': False})

若在浏览器访问时,出现中文乱码,可以通过json_dumps_params={‘ensure_ascii’: False}解决

五、状态保持

  1. def handle_cookie(request):
  2. response = HttpResponse('设置cookie')
  3. # 1.设置cookie
  4. response.set_cookie('username', 'cxb')
  5. response.set_cookie('username', 'cxb', max_age=10) # max_age的单位为秒
  6. response.set_cookie('username', 'cxb', expires=datetime.datetime(2022, 4, 24, 20, 56)) # 指定过期时间
  7. # 2.获取cookie值
  8. cookie = request.COOKIES
  9. cookie.get('username')
  10. # 3.删除cookie
  11. response.delete_cookie('username')
  12. return response
  1. 1.执行makemigrations
  2. 2.get()
  3. flush()
  4. 3.
  5. def handle_session(request):
  6. # 1.获取账号密码
  7. username = request.POST.get('username')
  8. # 2.数据库校验
  9. # 3.状态保持
  10. request.session['username'] = username
  11. request.session.flush()
  12. return HttpResponse('保持')
  13. 4.设置过期时间
  14. def handle_cookie(request):
  15. request.session.set_expiry(10) # 单位是秒
  16. request.session.set_expiry(datetime.datetime(2022, 4, 24, 20, 56)10) # 单位是秒
  17. return HttpResponse('保持')

六、Django表单