登录注册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
40import 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
# 注册功能
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)
# 登录
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
9from 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
在实现前端时出现的问题
数据组织形式
在前端中我是用了res.data.username
但是在后端中我没有使用Json格式返回数据,返回数据中也没有data字段,所以导致前端访问不到数据。
后端中的接口以login为例,必须以...\login\
访问,而我前端访问的地址是login
导致访问失败。解决办法是修改后端路由。
1 | from django.contrib import admin |