Django 2 登录注册

Django 2 Login Registration

我是 Django 的新手。经过几次 google 搜索后,我找到了完整的 CRUD,并且我知道如何处理它。但是在用户注册中,我在网上遇到了一些问题每个人都使用 Form.py 来处理注册表但我不想使用 Form.py 我喜欢自定义它。

但问题是当我使用 auth 登录时 Django auth 说这是一个错误的密码

我用

authenticate(email=email,password=password)

用于登录检查

有没有人请举例说明不使用 Form.py 的自定义登录注册

这是我的View.py代码

def loginCheck(request):
    if request.method == 'POST':
        username = request.POST.get('username'),
        password = request.POST.get('password'),
        user = authenticate(request, username=username, password=password)

        if user is not None:

            return HttpResponse('Find User')
        else:
            return HttpResponse("Not Find User")

和我的用户注册码

def registration(request):
    checkData = AuthUser.objects.filter(email=request.POST.get('email'))
    if not checkData:
        User.objects.create_user(
            username=request.POST.get('username'),
            email=request.POST.get('email'),
            password=(request.POST.get('password')),
        )
        messages.add_message(request, messages.INFO, 'User Saved Successfully')
        return redirect('loginView')
    else:
        messages.add_message(request, messages.INFO, 'Email Already Exists')
        return redirect('loginView')

我的登录码return找不到用户

如果您想要自己的注册过程,您必须使用set_password保存密码的功能。

from django.contrib.auth.models import User

user = User.objects.get_or_create(username='john')
user.set_password('new password')
user.save()

试试这个最小的例子。在此,您可以创建用户并通过 API.

登录
import json
from django.views.generic import View
from django.contrib.auth.models import User
from django.http import JsonResponse
from django.contrib.auth import authenticate, login


class UserRegisterView(View):
    def get(self, request):
        return JsonResponse({"message": "METHOD NOT ALLOWED"})

    def post(self, request, *args, **kwargs):
        json_body = json.loads(request.body)
        username = json_body.get('username')
        password = json_body.get('password')
        email = json_body.get('email')
        is_staff = json_body.get('is_staff', False)
        is_superuser = json_body.get('is_superuser', False)
        User.objects.create_user(
            username=username, email=email,
            password=password, is_staff=is_staff,
            is_superuser=is_superuser
        )
        return JsonResponse({"message": "User created"})


class LoginView(View):
    def get(self, request):
        return JsonResponse({"message": "METHOD NOT ALLOWED"})

    def post(self, request, *args, **kwargs):
        '''
        input data format:

        {
        "username" : "my username",
        "password":"mysecret123@"
        }

        '''
        json_body = json.loads(request.body)
        username = json_body.get('username')
        password = json_body.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return JsonResponse({"message": "login success"})
        else:
            return JsonResponse({"message": "login failed"})



为什么我解析 request.body


参考:
How to authenticate user in DJANGO(官方文档)

UPDAYE-1
根据请求更新视图,检查 POST 方法中的足够数据(粗体代码)

def loginCheck(request):
    if request.method == 'POST'<b> and 'username' in request.POST and 'password' in request.POST:</b>
        username = request.POST.get('username'),
        password = request.POST.get('password'),
        user = authenticate(request, username=username, password=password)

        if user is not None:

            return HttpResponse('Find User')
        else:
            return HttpResponse("Not Find User")
    <b>return HttpResponse("POST data wrong")</b>