登录注册Django后端搭建

登录注册Django后端搭建

安装Django并初始化项目

  • 安装 pip install django==2.2.28 此处指定了的版本,可以兼容环境中的其他库

  • 项目目录组织如下:

    /myproject
    ├── frontend 前端代码
    └── backend 后端代码

  • 在项目根目录下使用以下命令创建一个新的 Django 项目
    django-admin startproject backend

  • 处理数据库迁移
    python manage.py makemigrations 和 python manage.py migrate 是 Django 的命令行工具中的两个命令,用于处理数据库迁移。

    1、python manage.py makemigrations:这个命令会检查你的 Django 项目中的所有模型,并创建迁移文件。这些迁移文件是 Django 用来跟踪你的模型和数据库模式之间的变化的方式。每当你修改了模型(例如,添加字段、删除字段、更改字段类型等),你都需要运行这个命令来创建一个新的迁移文件。

    2、python manage.py migrate:这个命令会应用(执行)所有还未应用的迁移。这意味着它会执行迁移文件中的操作,将这些变化应用到数据库模式中。例如,如果你添加了一个新的字段,migrate 命令会在相应的表中添加一个新的列。

增加注册和登录的后端

  • 1、新建views.py文件夹,在其中写登陆注册的相关逻辑
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    import json
    from django.http import JsonResponse
    from django.views.decorators.csrf import csrf_exempt
    from django.contrib.auth.models import User
    from django.contrib.auth import authenticate, login

    # 注册功能
    @csrf_exempt
    def register(request):
    if request.method == 'POST':
    data = json.loads(request.body)
    username = data.get('username')
    password = data.get('password')

    # 验证用户名长度
    if len(username) < 4:
    return JsonResponse({'status': 'error', 'message': 'Username must be at least 4 characters'}, status=400)

    # 验证密码长度和格式
    if len(password) < 6 or not any(char.isdigit() for char in password) or not any(char.isalpha() for char in password):
    return JsonResponse({'status': 'error', 'message': 'Password must be at least 6 characters and contain at least one digit and one letter'}, status=400)

    user = User.objects.create_user(username, password=password)
    return JsonResponse({'status': 'success'}, status=201)

    # 登录
    @csrf_exempt
    def login_view(request):
    if request.method == 'POST':
    data = json.loads(request.body)
    username = data.get('username')
    password = data.get('password')
    user = authenticate(request, username=username, password=password)
    if user is not None:
    login(request, user)
    return JsonResponse({'status': 'success', 'token': request.session.session_key}, status=200)
    else:
    return JsonResponse({'status': 'error', 'message': 'Invalid credentials'}, status=401)
    else:
    return JsonResponse({'status': 'error', 'message': 'Invalid request method'}, status=400)
  • 2、在urls.py文件中配置路由
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from django.contrib import admin
    from django.urls import path
    from . import views

    urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/', views.register , name='register'),
    path('login/', views.login_view, name='login'),
    ]

启动服务并在postman中测试

python manage.py runserver

图 0

在实现前端时出现的问题

数据组织形式

在前端中我是用了res.data.username但是在后端中我没有使用Json格式返回数据,返回数据中也没有data字段,所以导致前端访问不到数据。

后端中的接口以login为例,必须以...\login\访问,而我前端访问的地址是login导致访问失败。解决办法是修改后端路由。

1
2
3
4
5
6
7
8
9
10
from django.contrib import admin
from django.urls import re_path # 一定要引入此库
from django.urls import path
from . import views

urlpatterns = [
re_path(r'^admin/?$', admin.site.urls),
re_path(r'^register/?$', views.register , name='register'),
re_path(r'^login/?$', views.login_view, name='login'),
]