Django笔记-注册用户
-
一、接口的定义:
请求方法:post
请求地址:http://127.0.0.1:8000/register
请求参数:
username(必传)
password(必传)
mobile(必传)
响应结果:JSON -
二、Django配置
1 数据库的配置(mysql)
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'HOST': 'x.x.x.x', # 数据库主机 'PORT': 3306, # 数据库端口 'USER': 'root', # 数据库用户名 'PASSWORD': 'xxxxxxx', # 数据库用户密码 'NAME': 'test' # 数据库名字 } }
2 session会话缓存的配置
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://xxxxxxxx/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "xxxxxxxx" } }, # 1号库用于存储session值(默认session会话存储在数据库中) "session": { # session "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://xxxxxxxxxx/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "xxxxxxxxxx" } }, } # 配置session会话引擎(默认:django.contrib.sessions.backends.db存储在表django_session中) SESSION_ENGINE = "django.contrib.sessions.backends.cache" # 设置缓存session会话的缓存名 SESSION_CACHE_ALIAS = "session" # 设置cookie的有效期(默认1209600:两周) SESSION_COOKIE_AGE = 86400 #一天
-
三、在users子应用下配置路由
1、在项目文件下配置根路由from django.contrib import admin from django.urls import path from django.urls import include urlpatterns = [ path('',include('users.urls')), ]
2、在users子应用下配置子路由
from django.urls import re_path, path from users.views import * urlpatterns = [ path('register/', LoginView.as_view()), ]
-
四、在users子应用下构建视图、编写业务代码
class RegisterView(View): """ 注册 """ def post(self, request): # 1.接受参数 json_str = request.body.decode() if json_str.strip('') == '': return http.JsonResponse({'errmsg': '缺少参数'}) json_dict = json.loads(json_str) username = json_dict.get('username') password = json_dict.get('password') mobile = json_dict.get('mobile') # 校验参数 if not all([username, password, mobile]): return http.JsonResponse({ 'errmsg': '缺少必传参数' }) # 判断用户名是否是5-20个字符 if not re.match(r'^\w{2,8}$', username): return http.JsonResponse({'errmsg': '请输入2-8个字符的用户名'}) # 判断密码是否是8-20个数字 if not re.match(r'^[0-9A-Za-z]{8,20}$', password): return http.JsonResponse({'errmsg': '请输入8-20个字符的密码'}) # 判断手机号是否合法 if not re.match(r'^1[3-9]\d{9}$', mobile): return http.JsonResponse({'errmsg': '请输入合法的手机号'}) # 用户名和手机号唯一 if User.objects.filter(Q(username=username) | Q(password=password)).count() > 0: return http.JsonResponse({'errmsg': '用户名或手机号重复'}) # 创建用户 try: user = User.objects.create_user( username=username, password=password, mobile=mobile ) except DatabaseError as e: return http.JsonResponse({ 'errmsg': '注册失败' }) login(request=request, user=user) return http.JsonResponse({ 'errmsg': 'ok' })
login()方法说明:
使用 login() ,实现用户登录,它需要 HttpRequest 对象和 User 对象。通过Django 的 session 框架, login() 会在 session 中写入用户的ID或以及user_backend,并将session存入数据库、缓存、文件等中,并在响应中设置cookie:sessionid=‘xxxxxxxx’,Django中默认将session写入cookie的名字为sessionid(可以在全局配置文件中通过配置项SESSION_COOKIE_NAME自定义),将session写入cookie中后,下一次用户在访问时,只要在视图中通过获取sessionid中的值来判断用户是否登录以及判断缓存或者数据库中的session会话没有过期,则用户不用再登录直接在视图中放行用户访问
session的过期时间配置方法:
1.全局配置文件中的配置项SESSION_COOKIE_AGE = 86400 (一天的时间),默认为1209600(2周)
2.request.session.set_expiry(value) -
五、测试
1.Postman发送请求测试
2.查看Cookies(有效期一天)
3.查看数据库
小白自学,大佬勿喷
上一篇-自定义用户模型类 https://blog.csdn.net/adminwg/article/details/126059951