测试平台开发(三)Django实现登录注册功能

在Django中通常一个功能的开发顺序为:创建应用 -> 数据库表字段设计 -> 视图函数编写 -> 应用路由 -> 全局路由 -> 测试

Django的工作流程是:

一、创建用户应用

打开 Tools > Run manage.py Task…,运行 startapp空格加应用名称

startapp user  # startapp:创建应用的关键字,user:为应用的名字

生成应用后一定要记得将应用名加入到settings.py文件里名为INSTALLED_APPS的列表中,遵循规范加入到列表的最后,再添加应用也一样

# settings.py
INSTALLED_APPS=[
  ……,
  'user',
]

应用目录详解

user
 ├── migrations  # 存放迁移数据表的历史文件,内容自动生成
 │    └── __init__.py  # 一个空文件,告诉 Python 该目录是一个 Python 包。
 ├── __init__.py  # 一个空文件,告诉 Python 该目录是一个 Python 包。
 ├── admin.py  # 该应用的后台管理系统配置,这里用不到
 ├── apps.py    # 该应用的一些配置,这里用不到
 ├── models.py    # 数据模块,用来定义数据表结构
 ├── tests.py    # Django提供的自动化测试功能,这里用不到
 └── views.py    # 视图模块,代码逻辑处理的主要地点,项目中大部分代码均在这里编写

二、编写数据模型

 1 #users/models.py
 2 from django.db import models
 3 
 4 from utils.base_models import BaseModel
 5 
 6 
 7 class Users(BaseModel):
 8     id = models.AutoField(primary_key=True, verbose_name='id主键')
 9     username = models.CharField(max_length=50, unique=True, verbose_name='用户名')
10     password = models.CharField(max_length=50, verbose_name='密码')
11     email = models.EmailField(max_length=50, verbose_name='邮箱')
12 
13     def __str__(self):
14         return self.username
15 
16     class Meta:
17         db_table = 'lx_users'
18         verbose_name = '用户数据'
19         verbose_name_plural = verbose_name

迁移数据库,打开 Tools > Run manage.py Task…,依次行

makemigrations
migrate

注释:

……

三、编写视图函数

 1 from django.http import JsonResponse
 2 from django.views import View
 3 
 4 from users.forms import RegisterForm
 5 from users.generate_token import generate_jwt_token
 6 from users.models import Users
 7 from utils.jwt_permission_required import auth_permission_required
 8 from utils.result import result
 9 
10 
11 class LoginView(View):
12     def post(self, request):
13         json_data = request.body.decode('utf-8')
14         python_data = eval(json_data)
15         username = python_data.get('username')
16         password = python_data.get('password')
17         data = Users.objects.filter(username=username, password=password).first()
18         token = generate_jwt_token(username)
19         if data:
20             result["message"] = "登录成功"
21             result["success"] = True
22             result["details"] = {"id": data.id,"token": token}
23             return JsonResponse(result, status=200)
24         result["message"] = "登录失败"
25         result["success"] = False
26         return JsonResponse(result, status=400)
27 
28 
29 class RegisterView(View):
30     def post(self, request):
31         json_data = request.body.decode('utf-8')
32         python_data = eval(json_data)
33         data = RegisterForm(python_data)
34         if data.is_valid():
35             data.cleaned_data.pop("r_password")
36             Users.objects.create(**data.cleaned_data)
37             data.cleaned_data.pop("password")
38             result["message"] = "注册成功"
39             result["success"] = True
40             result["details"] = data.cleaned_data
41             return JsonResponse(result, status=200)
42         else:
43             result["message"] = "注册失败"
44             result["success"] = False
45             result["details"] = data.errors
46             return JsonResponse(result, status=400)
47 
48 
49 @auth_permission_required()
50 def demo(request):
51     if request.method == 'GET':
52         return JsonResponse({"state": 1, "message": "token有效"})
53     else:
54         return JsonResponse({"state": 0, "message": "token无效"})

四、编写应用的路由

1 from django.urls import path
2 
3 from users import views
4 
5 urlpatterns = [
6     path('login', views.LoginView.as_view()),
7     path('register', views.RegisterView.as_view()),
8     path('demo', views.demo)
9 ]

五、定义全局路由

1 from django.contrib import admin
2 from django.urls import path, include
3 
4 
5 urlpatterns = [
6     path('admin/', admin.site.urls),
7     path('api/user/', include("users.urls")),
8 
9 ]

六、测试

1.注册接口

2.登录接口

3.token验证接口

  3.1 不带token

  

  3.2 带token

  

猜你喜欢

转载自www.cnblogs.com/debugliu/p/13392184.html
今日推荐