drf入门

chao0308 / 2023-08-29 / 原文

drf入门规范

1、Web开发模式

​ 1.1、前后端混合开发模式:

image-20230514233525225

​ 1.2、前后端分离开发模式

image-20230514233552329

2、API接口


3、接口测试工具postman

1693207870685

image-20230514233653942

image-20230514233708831

作业

# 1 用django写个demo--->postman测试
    -1 传用户名密码到后端,查询数据库,都对了--> 返回json格式{code:100,msg:登录成功}-->urlencoded
    -2 打印 request.POST # <QueryDict: {'username': ['jason'], 'password': ['1234']}>
    -3 打印 request.body # b'username=jason&password=1234'
    
# 2 写一个接口,可以传文件{code:100,msg:上传成功}
    -1 request.POST---->有没有取决于前端传没传数据
    -2 request.body--->小文件没事,大文件报错
    
    
# 3 扩展作业(学的好的)
    -测:json格式--->request.POST 取不到
    -request.data  默认没有--->(装饰器)--->无论前端什么格式:josn,urlencoded--->都取出来,是字典
    
    
    @xxxx
    def Index(request):
        request.data

1、用django写个demo--->postman测试

1693209877484

2、写一个接口,可以传文件{code:100,msg:上传成功}

1693218850066

-测:json格式--->request.data 默认没有--->(装饰器)--->无论前端什么格式:josn,urlencoded--->取出来,都是字典

from django.shortcuts import render, redirect, HttpResponse
from django.http import JsonResponse
from app_one import models
import json


# Create your views here.
def user_data(func):
    def inner(request, *args, **kwargs):
        # 1 如果POST中有值,直接赋值给request.data ---> urlencoded,form-data
        # 2 如果没有值:就是json格式,直接把body 序列化,给data即可
        try:
            request.data = json.loads(request.body) ----> json格式
        except:
            request.data = request.POST -----> urlencoded,form-data 格式
        return func(request, *args, **kwargs)

    return inner


@user_data
def login(request):
    if request.method == "POST":
        username = request.date.get("username")
        password = request.date.get("password")
        file = request.date.get("file")
        user_obj = models.Userinfo.objects.filter(username=username, password=password).first()
        if user_obj:
            return JsonResponse({"code": 200, "msg": "登录成功", "date": []})
        else:
            return JsonResponse({"code": 1000, "msg": "登录失败"})

总结

1、前端中不同的编码格式:
    urlencoded 在Django中:
        request.body体中:b'username=jason&password=1234'
        request.POST中可以取出来值7
    form-data 在Django中:
        request.body体中:数据部分和文件部分的拼接
        b'----------------------------160806048070386359108417\r\nContent-Disposition: form-data; name="username"\r\n\r\njason\r\n----------------------------160806048070386359108417\r\nContent-Disposition: form-data; name="password"\r\n\r\n1234\r\n----------------------------160806048070386359108417--\r\n'
        request.POST中可以取出来数据部分,文件部分要从request.FILES中取
    json格式数据 在Django中:
        request.body体中:b'{"username":"jason","password":"1234"}' 二进制形式
        request.POST中取不出来值
 2、不用pycharm创建Django项目:
	"django-admin startproject 项目名"
 3、Django中的文件对象和原来的文件对象
	-django:from django.core.files.uploadedfile import InMemoryUploadedFile
    -原生文件:_io.BufferedWriter
    -django中文件类没有继承原生文件类,但是有原生文件类所有方法