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