سؤال

أريد إنشاء عرض الاشتراك.هنا ، رمز بلدي:

from django.shortcuts import get_object_or_404, render, redirect
from django.contrib.auth import authenticate, login as auth_login
from django.contrib.auth.models import User

# create a function to resolve email to username
def get_user(email):
    try:
        return User.objects.get(email=email.lower())
    except User.DoesNotExist:
        return None

def signup(request):
    if request.method == "GET":
        return render(request, 'accounts/signup.html')
    if request.method == "POST":
        email = request.POST['email']
        last_name = request.POST['last_name']
        first_name = request.POST['first_name']
        password = request.POST['password']
        password2 = request.POST['password2']
        user = get_user(email)
        if password == password2:
            if user is None:
                user = User.objects.create_user(last_name, email, password)
                user.first_name = first_name
                user.save()
                user = authenticate(username=user, password=password)
                #login
                return redirect('/')
            else:
                #messages
                return render(request, 'accounts/signup.html')
        else:
            #messages
            return render(request, 'accounts/signup.html')

أحتاجك لجعل ذلك أفضل لأنه كما ترى ، إنه فوضوي بعض الشيء.

أنا لا أعرف إذا كان من الأفضل استخدام البرنامج المساعد مثل جانغو التسجيل لهذه المهمة?

شكرا جزيلا!

هل كانت مفيدة؟

المحلول

أولا كنت تفعل فئة النموذج في forms.py في التطبيق الخاص بك.هناك يمكنك تحديد الحقول الخاصة بك مثل 'البريد الإلكتروني', 'الاسم الأول', ...يمكنك تجاوز clean الطريقة في فئة النموذج الخاص بك ، ثم يمكنك استخدامه مع وجهة نظرك.

class RegistrationForm(forms.Form):
    username = forms.EmailField(max_length=30, widget=forms.TextInput(attrs=attrs_dict))
    password1 = forms.PasswordField()
    password2 = forms.PasswordField()
    first_name = forms.CharField(max_length=100)
    # rest of the fields

    def clean(self):
        cleaned_data = super(RegistrationForm, self).clean()
        username = cleaned_data.get("username")
        password1 = cleaned_data.get("password1")
        password2 = cleaned_data.get("password2")

        # you can validate those here

    class Meta:
        model = User

ثم في وجهة نظرك أنت

from forms import RegistrationForm

def signup(request):
    if request.method == "GET":
        return render(request, 'accounts/signup.html')
    if request.method == "POST":
        form = RegistrationForm(data = request.POST):
        if form.is_valid():
            user = form.save(False)
            user.set_password(user.password)
            user.save()
            user = authenticate(username=user.username, password=request.POST['password1'])
            login(request, user)

            return redirect('/')

فإنه يجعل الكثير من استخدام ما جانغو يمنحك مجانا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top