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')

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')

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

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

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

6:md5加密

def md5(s):
    m = hashlib.md5(s.encode('utf8'))
    return m.hexdigest()

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

这里传入的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
  • 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:@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
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值