9 django CBV
Posted 栗子测试开发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9 django CBV相关的知识,希望对你有一定的参考价值。
1 修改views
import hashlib import json from django.core import serializers from django.http import JsonResponse from django.utils.decorators import method_decorator # Create your views here. from django.views import View from user.models import User from utils.mytoken import make_token, login_check class Login(View): def post(self, request): json_obj = json.loads(request.body) # 转字典 try: username = json_obj[\'username\'] password = json_obj[\'password\'] except Exception as e: result = {\'code\': -1, \'msg\': u\'用户名或密码为空!\'} return JsonResponse(result) users = User.objects.filter(username=username) # 返回数组 if users is None: result = {\'code\': -1, \'msg\': u\'用户名或密码错误!\'} return JsonResponse(result) user = users[0] m = hashlib.md5() m.update(password.encode()) # 密码比对 if m.hexdigest() != user.password: result = {\'code\': -1, \'msg\': u\'用户名或密码错误!\'} return JsonResponse(result) # 生成 token token = make_token(username) # encode的作用是将unicode编码的字符串编码成二进制数据 # decode的作用是将二进制数据解码成unicode编码 result = {\'code\': 1, \'data\': {\'token\': token}, \'msg\': u\'登录成功!\'} return JsonResponse(result) class List(View): @login_check def get(self, request): all_users = serializers.serialize("json", User.objects.all()) result = {\'code\': 1, \'data\':{\'all_users\':all_users}, \'msg\': u\'获取所有用户成功!\'} return JsonResponse(result)
2 修改工程urls
urlpatterns = [ path(\'admin/\', admin.site.urls), path(\'v1/user/\', include((\'user.urls\',\'user\'), \'user\')), # 分布式路由,匹配到/v1/user后,到 user urls中找 user 后面的path ]
3 修改user urls
urlpatterns = [ path(\'login\', Login.as_view(), name=\'login\'), path(\'list\', List.as_view(), name=\'list\'), ]
4 修改login_check方法
# token 验证装饰器 def login_check(func): def wrapper(self, request, *args, **kwargs): # token 校验 token = request.META.get(\'HTTP_AUTHORIZATION\') # 没有 token # if not a 用来判断变量 a 是否 None,等于 if a is not None if token is None: result = {\'code\':403, \'msg\':u\'用户未登录 - 没有权限!\'} return JsonResponse(result) try: res =jwt.decode(token, settings.LIZI_TOKEN_KEY, algorithms=\'HS256\') except Exception as e: print(\'jwt error {}\'.format(e)) result = {\'code\':403, \'msg\': u\'用户未登录!\'} return JsonResponse(result) username = res[\'username\'] user = User.objects.get(username=username) # user 挂载 request 上,以便后面方法可以直接取出用户 request.myuser = user return func(self, request, *args, **kwargs) return wrapper
以上是关于9 django CBV的主要内容,如果未能解决你的问题,请参考以下文章