zoukankan      html  css  js  c++  java
  • 基于django封装的常用装饰器和函数

    1:返回操作成功的json数据

    def response_success(message, data=None, data_list=[]):
        return HttpResponse(json.dumps({
            'code': 2000,#code由前后端配合指定
            'message': message,#提示信息
            'data': data,#返回单个对象
            'dataList': data_list#返回对象数组
        }), 'application/json')
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2:返回操作失败的json数据

    def response_failure(message, data=None, data_list=[]):
        return HttpResponse(json.dumps({
            'code': 4000,
            'message': message,
            'data': data,
            'dataList': data_list
        }), 'application/json')
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3:拦截非get请求

    def get(func):
        def in_fun(request):
            if request.method == 'GET':
                return func(request)
            else:
                return response_failure('not get request')
    
        return in_fun
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4:拦截非post请求

    def post(func):
        def in_fun(request):
            if request.method == 'POST':
                return func(request)
            else:
                return response_failure('not post request')
    
        return in_fun
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5:参数检查

    def params(*args):#接收传入的字段
        def check_params(func):
            def in_fun(request):
                p = []
                for val in args:#遍历客户端请求是否包含字段
                    param = request.POST.get(val, 100)
                    if param == 100:#若不包含则返回错误
                        return response_failure('need param %s' % val)
                    else:
                        p.append(param)#若包含则传入数组返回给被装饰的函数
                return func(request, p)
    
            return in_fun
    
        return check_params
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    6:md5加密

    def md5(s):
        m = hashlib.md5(s.encode('utf8'))
        return m.hexdigest()
    • 1
    • 2
    • 3

    7:保存文件

    def save_file(file, save_path='photo'):
        destination = open(os.path.join(save_path, file.name), 'wb+')
        for chunk in destination:
            destination.write(chunk)
        destination.close()
    • 1
    • 2
    • 3
    • 4
    • 5

    这里传入的file是request.FILES对象,save_path是图片保存路径


    @get和@post使用

    1:在views模板下编写测试函数(记得在urls.py文件中进行相应配置) 
    2:将刚刚封装的函数所在模板引入views.py 
    3:使用@get进行拦截

    @get
    def test(request):
        return response_success('test')#返回json
    • 1
    • 2
    • 3

    4:使用postman进行测试 
    post请求 
    post请求

    get请求 

    @post的用法如上

    @params,response_success,response_failure使用

    @post
    @params('account', 'password')
    def login(request, args):
        user = BUser.objects.filter(account=args[0], password=md5(args[1]))
        if len(user) == 0:
            return response_failure('account or password error')
        u = model_to_dict(user[0])
        u['password'] = ''
        request.session[config.LOGIN] = config.TAG_LOGIN
        return response_success('login success', u)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1:@params中传入你所需的字段 
    2:args是一个list,list里面的数据按字段顺序排列 
    3:如上面的例子args[0]为account字段的值args[1]是password字段的值 
    4:从数据库查询出来的结果要用model_to_dict方法才能返回json格式字符串

    这里写图片描述

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_35055467/article/details/77450117
  • 相关阅读:
    基于BGP/EVPN控制平面的VXLAN anycast-VTEP anycast-gateway基本配置
    NetworkManager配置VRF
    IBGP Segment Routing AIGP属性
    EBGP segment routing
    CentOS8创建网桥
    F5 HTTP response body rewrite
    OSPF Segment Routing和MPLS基本配置
    L2TP 和 IPsec over L2TP
    nmap
    LINUX DNS客户端 解析域名慢的问题。
  • 原文地址:https://www.cnblogs.com/ExMan/p/9477554.html
Copyright © 2011-2022 走看看