簡體   English   中英

如何使用 django 正確制作注冊視圖

[英]How to properly make a signup view with django

我使用 Django 創建了一個注冊視圖,但它不起作用,它存儲在數據庫中,但我無法使用該視圖存儲的數據登錄,而我可以使用我使用 manage.py createsuperuser 創建的用戶登錄這里是我的注冊視圖

def signup(request):
if request.method == 'POST':
    user = User.objects.create(
        username=request.POST['username'],
        password=request.POST['password'],
        email=request.POST['email'],
        first_name=request.POST['first_name'],
        last_name=request.POST['last_name'],
    )
    user.save()
    return HttpResponseRedirect(reverse('posts'))
else:
    signupform = SignUpForm()
    return render(request, 'users/signup.html', {'form': signupform})

這是我的注冊表單

class SignUpForm(forms.Form):
    
    username = forms.CharField(max_length=30, required=True)
    password = forms.CharField(widget=forms.PasswordInput(), required=True)
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)

我只需要知道究竟出了什么問題以及如何准確修復它,或者我需要學習什么才能正確執行此任務。

您的代碼中有一些事情沒有正確完成。 但主要問題是您在保存密碼之前沒有 hash 密碼。

from django.contrib.auth.hashers import make_password,


def signup(request):
    if request.method == 'POST':
        user = User.objects.create(
            username=request.POST['username'],
            password=make_password(request.POST['password']),
            email=request.POST['email'],
            first_name=request.POST['first_name'],
            last_name=request.POST['last_name'],
        )
        return HttpResponseRedirect(reverse('posts'))
    else:
        signupform = SignUpForm()
        return render(request, 'users/signup.html', {'form': signupform})

這段代碼解決了你的問題。 但是如果你想做得更正確,你應該在使用表單保存之前驗證數據並保存表單,而不是在視圖中創建用戶。 您可以在文檔中閱讀它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM