Как я могу проверить, что имя пользователя и почта существуют в Django? - PullRequest
0 голосов
/ 02 ноября 2018

Я только начал изучать Джанго. Я сделал регистрационную форму. это работает хорошо. Но я не мог проверить, существуют ли имена пользователей и письма в этой регистрационной форме. если я пытаюсь зарегистрироваться с тем же именем пользователя, я получаю ошибку (1062, "Duplicate entry 'asdasd' для ключа 'username'"). (asdasd мое имя пользователя ..)

Как я могу решить это?

forms.py

from django import forms
class RegisterForm(forms.Form):
    username = forms.CharField(required=True, max_length=20, label= "Kullanıcı Adı")
    email = forms.EmailField(required=True, label="E-Mail")
    password = forms.CharField(max_length=20, label= "Password", widget=forms.PasswordInput)
    confirm = forms.CharField(max_length=20, label="RePassword",widget=forms.PasswordInput)
def clean(self):
    username = self.cleaned_data.get("username")
    email = self.cleaned_data.get("email")
    password = self.cleaned_data.get("password")
    confirm = self.cleaned_data.get("confirm")


    if password and confirm and password != confirm:
        raise forms.ValidationError("Passwords dont match")

    values = {
        "username" : username,
        "email" : email,
        "password" : password,
    }
    return values

views.py

from django.shortcuts import render, redirect
from .forms import RegisterForm
from django.contrib import messages
from django.contrib.auth.models import User
from django.contrib.auth import login


def register(request):

    form = RegisterForm(request.POST or None)

    if form.is_valid():
        username = form.cleaned_data.get("username")
        email = form.cleaned_data.get("email")
        password = form.cleaned_data.get("password")
        newUser = User(username=username)
        newUser.email = email
        newUser.set_password(password)
        newUser.save()
        login(request, newUser)
        messages.success(request,"Successful on Register")
        return redirect("index")
    context = {
        "form": form
    }
    return render(request, "register.html", context)


def loginUser(request):
    return render(request, "login.html")

def logoutUser(request):
    return render(request, "logout.html")

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Перед созданием пользователя вы можете проверить, существует ли имя пользователя внутри оператора if form.is_valid():

user_exist = User.objects.filter(username=username).exists()
if not user_exist:
    # create your user
    new_user = User(username=username)
    new_user.email = email
    new_user.set_password(password)
    new_user.save()
#return error creating error.
0 голосов
/ 02 ноября 2018

Самый простой способ - добавить методы в класс формы

def clean_email(self):
    if User.objects.filter(username=username).exists():
        raise forms.ValidationError("Username is not unique")

def clean_username(self):
    if User.objects.filter(email=email).exists():
        raise forms.ValidationError("Email is not unique")
...