drf_持续更新01

6 篇文章 0 订阅

Web开发模式

         1 前后端混合开发模式---》老项目
         2 前后端分离开发模式---》新项目

 

API接口

为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本

api接口:

        通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介

     -https://www.xxxx.com/books/--->json 格式数据---》接口
    -https://www.xxxxxx.com/xxxxxxx/articles/xxxxxxx.html---》返回界面

url和接口的区别:

        Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点

1  url:长得像返回数据的url链接
    https://api.map.baidu.com/place/v2/search


2 请求方式:get、post、put、patch、delete
        采用get方式请求上方接口

3 请求参数:json或xml格式的key-value类型数据
        ak:6E823f587c95f0148c19993539b99295
        region:上海
        query:肯德基
        output:json

4 响应结果:json或xml格式的数据
        -https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json

 典型的api接口长这样

    -url地址
    -有请求方式
    -携带参数
    -返回格式是json,xml

 

 

 

 

 需要进行反序列化。

总结

1 前端不同编码格式

        urlencoded: body体中 :username=lqz&password=123  django  的request.POST取出值

        json: body体中 :{"username":"lqz","password":"123"}  django  的request.POST取不出值

                   request.body 能取出值。     

        form-data:body中格式固定:数据部分和文件部分--》request.POST能取出数据,取不出文件,文件都是从request.FILES

2 mysql中varchar和char的区别:

        char(定长) :超过直接报错,不够则用字符补全

        vachar(可变长): 超过直接报错,不够则有几个存几个

        大多数情况下使用varchar,如果存储数据都是固定长度,用char

3 不用pycharm创建django项目的命令

        django-admin startproject 项目名

        (django-admin startproject app01)

4 django中的文件对象和原来的文件对象

     -django:from django.core.files.uploadedfile import InMemoryUploadedFile
    -原生文件:_io.BufferedWriter
    -django中文件类没有继承原生文件类,但是有原生文件类所有方法

装饰器模板

def warpper_request(func):
    def inner( *args, **kwargs):
        # 在执行被装饰函数前执行
        res = func(*args, **kwargs)
        # 在执行被装饰函数后执行
        return res
    return inner

     写一个装饰器,无论前端发过来什么格式的数据,都可以取出来,并转为字典格式。

# 只用来装饰视图函数,request必传
def warpper_request(func):
    def inner(request, *args, **kwargs):
        # 在执行被装饰函数前执行
        # 1 如果POST中有值,直接赋值给request.data ---> urlencoded,form-data
        # 2 如果没有值:就是json格式,直接把body 序列化,给data即可
        try:
            request.data = json.loads(request.body)
        except:
            request.data = request.POST
        res = func(request, *args, **kwargs)
        # 在执行被装饰函数后执行
        return res

    return inner

上面装饰器的用法

@warpper_request
def login1(request):
    username = request.data.get('username')
    password = request.data.get('password')
    print(username)
    user = User.objects.filter(username=username, password=password).first()
    if user:
        return JsonResponse({'code': 100, 'msg': '登录成功'})
    else:
        return JsonResponse({'code': 101, 'msg': '用户名或密码错误'})

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值