注册token应用
修改settings.py:
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"todo",
"rest_framework",
"rest_framework.authtoken",
]
接着迁移模型:
python manage.py migrate
配置DRF
修改settings.py:
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [
"rest_framework.authentication.TokenAuthentication",
]
}
创建应用
这里不能叫auth,否则会重名,会抛异常。
python manage.py startapp mauth
注册应用:
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"mauth",
"todo",
"rest_framework",
"rest_framework.authtoken",
]
实现用户注册的视图函数
完整代码:
from django.shortcuts import render
import logging
from django.contrib.auth.models import User
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.authtoken.models import Token
from rest_framework.parsers import JSONParser
@csrf_exempt
def register(request):
if request.method != "POST":
logging.warning(f"暂不支持此方法:{request.method}")
return
try:
data = JSONParser().parse(request)
user = User.objects.create_user(username=data["username"], password=data["password"])
user.save()
token = Token.objects.create(user=user)
return JsonResponse({"token": str(token)}, status=200)
except Exception as e:
logging.error(e)
return JsonResponse({"error": "注册用户失败"}, status=400)
注册路由
总路由:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path("api/todo/", include("todo.urls")),
path("api/auth/", include("mauth.urls")),
]
子路由:
from django.urls import path
from . import views
app_name = "mauth"
urlpatterns = [
path("register/", views.register, name="register"),
]
接口测试
注意,这里充分体现了Django开发最不方便的地方,因为我们没有继承默认的DRF类,所以这个接口不支持通过网页测试了。
所以,这里我们使用Postman进行测试。
POST:http://localhost:8000/api/auth/register/
截图如下:
注册成功以后,会返回一个token。