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请求 

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

基于django封装的常用装饰器和函数的更多相关文章

  1. django类视图的装饰器验证

    django类视图的装饰器验证 django类视图的get和post方法是由View内部调用dispatch方法来分发,最后调用as_view来完成一个视图的流程. 函数视图可以直接使用对应的装饰器 ...

  2. 给django视图类添加装饰器

    要将login_required装饰到view class的dispatch方法上, 因为dispatch方法为类方法,不是单个的函数,所以需要将装饰函数的装饰器 login_required转化为装 ...

  3. 面向对象(三)——组合、多态、封装、property装饰器

    组合.多态.封装.property装饰器 一.组合 1.什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 class Foo(): pass class Bar(): pas ...

  4. 基于linux信号的timeout装饰器

    在做基于ray的分布式任务处理时,偶尔遇到由于ray集群不稳定导致的长时间连接不上,进而导致程序卡死,无法向后端返回任务状态的情况.但是ray的初始化函数本身未实现超时机制,因此设计基于多线程+信号的 ...

  5. Day11 Python基础之装饰器(高级函数)(九)

    在python中,装饰器.生成器和迭代器是特别重要的高级函数   https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...

  6. python通过装饰器检查函数参数的数据类型的代码

    把内容过程中比较常用的一些内容记录起来,下面内容段是关于python通过装饰器检查函数参数的数据类型的内容. def check_accepts(f): assert len(types) == f. ...

  7. python:带参数的装饰器,函数的有用信息

    一.带参数的装饰器,函数的有用信息 def func1(): '''此函数的功能是完成的登陆的功能 return: 返回值是登陆成功与否(true,false) ''' print(333) func ...

  8. 关于Python装饰器内层函数为什么要return目标函数的一些个人见解

    https://blog.csdn.net/try_test_python/article/details/80802199 前几天在学装饰器的时候,关于装饰器内层函数调用目标函数时是否return目 ...

  9. diango中让装了装饰器的函数的名字不是inner,而是原来的名字

    让装了装饰器的函数的名字不是inner,而是原来的名字 from functools import wraps def wrapper(func): @wraps(func) # 复制了原来函数的名字 ...

随机推荐

  1. Angular 一些问题(跨域,后台接收不到参数)

    1,跨域:跟前端没多大关系的,后台没设置头而已.这时候如果你们后端太菜你可以叫他加上每种语言 都不同,但是里面的呢荣是一样的.具体跨域可以跳转这里http://www.cnblogs.com/dojo ...

  2. python3 configparser对配置文件读写

    import configparser #read data from conf filecf=configparser.ConfigParser()cf.read("biosver.cfg ...

  3. 说说我的web前端之路,分享些前端的好书(转)

    WEB前端研发工程师,在国内算是一个朝阳职业,这个领域没有学校的正规教育,大多数人都是靠自己自学成才.本文主要介绍自己从事web开发以来(从大二至今)看过的书籍和自己的成长过程,目的是给想了解Java ...

  4. Kindeditor上传图片回显不出来

    原因之一: 图片成功上传但是回显不出来,这个时候,要检查返回的图片地址是否加了http://这个玩意,不然会将原来的头加上图片返回地址.

  5. Spark Streaming和Kafka整合开发指南(二)

    在本博客的<Spark Streaming和Kafka整合开发指南(一)>文章中介绍了如何使用基于Receiver的方法使用Spark Streaming从Kafka中接收数据.本文将介绍 ...

  6. firfox浏览器常用快捷键

    Ctrl + 数字键来打开第N个标签页这种还要先数完再到键盘上找数字Ctrl + Page Up = 激活左边一个标签页Ctrl + Page Down = 激活右边一个标签页Ctrl + Tab = ...

  7. Ubuntu 14.04下单节点Ceph安装(by quqi99)

    作者:张华  发表于:2014-06-23版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99 ) Ceph ...

  8. python使用记录

    #2017-7-17 1.用len()函数可以获得list元素的个数; len()可以获取字符串长度 2. list正向0开始索引,,逆向-1开始索引; 也可以把元素插入到指定的位置,比如索引号为1的 ...

  9. 使用appium和testng实现Android自动截图

    简单介绍 需求场景是:当测试安卓应用的脚本得到失败结果时,对当前手机屏幕截图,便于查找问题. 实现方式是:1)定义一个父类UITest,作为所有测试类的父类.在父类中UITest中定义一个截图的方法, ...

  10. Java for LeetCode 094 Binary Tree Inorder Traversal

    解题思路: 中序遍历,左子树-根节点-右子树 JAVA实现如下: public List<Integer> inorderTraversal(TreeNode root) { List&l ...