python - 如何将 Django 的身份验证模型与自定义 REACT 前端注册集成
问题描述
所以,这个问题可能太抽象了,但我觉得有必要在这里拍摄。我被教导使用的 Django 完全不符合惯例,他们不使用 Django 的默认身份验证模型/视图。我将在下面向您展示我过去 SignUpView 的示例:
from .models import Customer
class SignUpView(View):
def post(self, request):
data = json.loads(request.body)
try:
validate_email(data['email'])
if len(data['password']) < 6:
return JsonResponse({'message': '6자리 이상 입력하세요'}, status=400)
if not Customer.objects.filter(email = data['email']).exists():
hashed_password = bcrypt.hashpw(data['password'].encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
Customer.objects.create(
email = data['email'],
password = hashed_password,
username = data['username'],
phone = data['phone']
)
return JsonResponse({'message':'SUCCESS'}, status=200)
else:
return JsonResponse({'message':'ALREADY_EXIST'}, status=400)
except KeyError:
return JsonResponse({'message':'INVALID_KEYS'}, status=400)
except ValidationError:
return JsonResponse({'message':'INVALID_EMAIL'}, status=400)
然而,有一天我被要求创建超级用户功能和自定义权限功能,从而迫使我放弃我被教导制作注册视图的方式。以下是我今天创建的内容,以及一些博客文章
from django.shortcuts import render
from django.contrib.auth.models import User
from django.contrib.auth.models import Permission
from django.contrib.auth.forms import UserCreationForm
from django.views import View
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
@login_required
def index(request):
return render(request,'accounts/index.html')
class SignUpView(View)
def post(request):
context = {}
form = UserCreationForm(request.POST or None)
if request.method == "POST":
if form.is_valid():
user = form.save()
login(request,user)
return render(request,'accounts/index.html')
context['form']=form
return render(request,'registration/sign_up.html',context)
我刚刚创建的代码不起作用,因为我没有使用 Django 模板,而是我的前端队友正在创建表单,就像以前一样。因此,我将使用如下代码接收潜在用户的注册表单:
data = json.loads(request.body)
email = data['email']
password = bcrypt.hashpw(data['password'].encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
username = data['username']
phone = data['phone']
有什么方法可以像我刚才演示的那样将 Django 的 Auth 功能与自定义注册表单集成在一起?提前非常感谢!
解决方案
我不会问为什么你被教导不要使用 Django 的身份验证系统,和/或为什么你在 Django 已经使用 Bcrypt 密码散列的情况下使用它,而且可能比你更安全,但是.. .
如果你已经有
form = UserCreationForm(request.POST or None)
和
data = json.loads(request.body)
email = data['email']
password =
username = data['username']
phone = data['phone']
那么合成就很简单了
data = json.loads(request.body)
form = UserCreationForm(data={
'email': data['email'],
'password': data['password'],
'username': data['username'],
'phone': data['phone'],
})
并继续这样做,但我建议查看例如Django REST 框架,以使这些 API 视图更易于使用。
推荐阅读
- c# - 获取更新的实体对象类型
- javascript - 使用 Angular 10 将 JSON 值映射到新字符串以在 HTML 中显示
- wordpress - 如何将重力形式链接到 Odoo CRM
- android - Gradle - 根据特定 productFlavor 的 buildType 添加 applicationIdSuffix
- php - PHP preg_replace 正则表达式在 cid 时不替换:直到下一次匹配
- r - 拆分/组向量中的R计数变量?
- apache - 如何通过共享相同的凭据来使用 htpasswd 保护多个域?
- javascript - 如何使用 vanilla javascript 动态添加 SVG 图标
- python - 如何使用 Python 从 Square 中的 create customer 方法中检索客户 ID
- azure - Azure AD B2C 重置密码电子邮件链接