Content
该系列文章源码来自: 博主第一次手撸博客(Django)
温馨提示: 该系列教程不提供前端布局和美化方面的内容, 博主本行是后端, 在我的项目中前端部分采用的框架是 Materialize
, 是谷歌 Material Design
设计风格的前端框架, 欲知详情请点击上方提供的仓库地址, 源码采用WTFPL许可证开源
背景介绍
后端开发API化已经是不争的事实了, 再说多点还有前后端分离等等等等, 总之一句话, API一时爽, 一直API一直爽
, 由于此次项目已经编写了多个API, 形成了我个人风格的代码风格, 所以我单独用一篇文章来介绍一下.
开发环境
- 操作系统:
Manjaro Linux 18
- Python版本:
Python3
提示: Manjaro把Python3作为默认的Python版本, 其他发行版可能默认版本是Python2, 如果默认为Python2, 以下出现的Python和pip命令请使用python3和pip3
- Django版本:
v2.1.5
- jQuery版本:
v3.3.1
基本格式规范
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| from django.contrib.auth.decorators import login_required from django.views.decorators.csrf import csrf_exempt
@csrf_exempt # 允许跨域请求 def xxx_api(request): if request.is_ajax(): if request.method == "POST": return JsonResponse({"status": "OK"}) else: return HttpResponseForbidden else: return HttpResponseServerError()
|
这样写的话, 逻辑结构非常清晰, 判断这个请求是否为ajax发送的请求
(如果不用ajax请去掉这一层if..else) => 判断这个请求是否为POST
(需要GET方法就改成GET) => 是POST, 执行相应的业务逻辑代码
=> 业务逻辑执行成功, 返回json数据给前端处理
根据具体的业务逻辑, 最后的返回语句可以在错误捕获和条件判断中灵活处理
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| from django.views.decorators.csrf import csrf_exempt
@csrf_exempt def login_api(request): if request.is_ajax(): if request.method == "POST": name = request.POST['username'] pwd = request.POST['password'] user = authenticate(username=name, password=pwd) if user is not None and user.is_active: login(request, user) return JsonResponse({ "status": '1', "message": '登录成功' }) else: return JsonResponse({ "status": '0', "message": '登录失败' }) else: return HttpResponseForbidden() else: return HttpResponseServerError()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| from django.views.decorators.csrf import csrf_exempt
@csrf_exempt def logout_api(request): if request.is_ajax(): if request.method == "POST": signal = request.POST['signal'] if signal == "OUT": try: logout(request) return JsonResponse({ "status": "OK" }) except: return JsonResponse({ "status": "WTF" }) else: return JsonResponse({ "status": "WTF" }) else: return HttpResponseForbidden else: return HttpResponseServerError()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| from django.contrib.auth.decorators import login_required from django.views.decorators.csrf import csrf_exempt
@csrf_exempt @login_required(redirect_field_name='', login_url='/login_page/') def image_upload_api(request): if request.is_ajax(): if request.method == 'POST': files = request.FILES.getlist('image') try: for file in files: image_upload.objects.create(username=request.user, image=file) return JsonResponse({ 'status': 'OK' }) except: return JsonResponse({ 'status': 'WTF' }) else: return HttpResponseForbidden() else: return HttpResponseServerError()
|
相信大家理解了之后马上就能举一反三了