Мой код Django (формы и модели) работает просто отлично, но это определенно плохой выбор для больших объемов данных. Буду признателен за предложения
Этот код отлично работает при регистрации пользователей и добавлении их в базу данных. С дополнительным кодом в шаблоне, он также показывает пользователям, что выбранное ими имя пользователя/email уже существует. Однако я уверен, что качество этого кода очень плохое, поскольку он не будет хорошо работать с большими базами данных, так как я ищу всех пользователей и их имена/почту. Но опять же, я не знаю, как добавить лучшую валидацию.
Я решил добавить эти валидаторы (пароли исключены), потому что unique=True
в моделях не влияют на формы. Я имею в виду, что до этих кодов, если я регистрировался с одним и тем же именем пользователя и электронной почтой снова и снова, если пароли совпадали, последний пароль, который я ввел, добавлялся в базу данных (номер пользователя оставался прежним), но форма считалась валидной (я думаю) и не показывала никаких ошибок пользователю. Это лучшее, что я придумал, но я уверен, что это плохой вариант. Я принимаю любые предложения, какую еще валидацию я могу добавить, чтобы решить указанную проблему. Я думал, что unique=True
исправит ситуацию, но, видимо, этого недостаточно. Обратите внимание, что я тоже новичок, и если этот вопрос прозвучит как вопрос новичка, пожалуйста, извините меня. Спасибо
class UserForm(forms.Form):
username=forms.CharField(label='username', max_length=30)
email=forms.EmailField(label='email')
password=forms.CharField(label='password', max_length=100, widget=forms.PasswordInput)
confirm_password=forms.CharField(label='confirm_password', max_length=100, widget=forms.PasswordInput)
def clean(self):
cleaned_data=super().clean()
data1=cleaned_data.get('password')
data2=cleaned_data.get('confirm_password')
if data1!=data2:
raise forms.ValidationError("Passwords do not match")
data3=cleaned_data.get('username')
userset=UserModel.objects.all()
for person in userset:
if person.username==data3:
raise forms.ValidationError("User with such username already exists")
data4=cleaned_data.get('email')
userset=UserModel.objects.all()
for person in userset:
if person.email==data4:
raise forms.ValidationError("User with such email already exists")
class UserModel(models.Model):
username=models.CharField(max_length=30, unique=True, primary_key=True)
email=models.EmailField(unique=True)
password=models.CharField(max_length=100)```