Не могу разобраться с формами регистрации пользователей в django
Добрый день! У меня проблема с регистрацией пользователей на сайте, я перепробовал много методов, подсмотренных в интернете, но я сделал что-то похожее, но оно не работает. Я понимаю, что возможно это не рабочий метод, или я неправильно его оформил. Не могли бы вы дать мне совет по регистрации или исправить ошибки в моем коде? Заранее спасибо!
Forms.py
from django.forms import ModelForm, \
TextInput, \
Textarea, \
NumberInput, \
FileInput, \
PasswordInput, \
EmailInput
from django.contrib.auth.models import User
from .models import Recipe
class FoodForm(ModelForm):
class Meta:
model = Recipe
fields = ["recipe_title", "recipe", "recipe_time", "recipe_ingridients", "image"]
widgets = {
"recipe_title" : TextInput(
attrs={
"class" : "title_form",
"placeholder" : "Введите название рецепта"
}
),
"recipe": Textarea(
attrs={
"class": "form_of_all",
"placeholder": "Введите ваш рецепт"
}
),
"recipe_time" : NumberInput(
attrs={
"class" : "ingr",
"placeholder" : "Введите время"
}
),
"recipe_ingridients": NumberInput(
attrs={
"class": "ingr",
"placeholder": "Введите кол-во ингридиентов"
}
),
"image" : FileInput(
attrs={
'type' : "file",
'name' : "input__file",
'id' : "input__file"
}
)
}
class RegisterationUserForm(ModelForm):
class Meta:
model = User
fields = ["first_name", "last_name", "email", "password"]
widgets = {
"first_name" : TextInput(
attrs=
{
"placeholder" : "Введите имя",
"type" : "text",
"class" : "text_form"
}
),
"last_name": TextInput(
attrs=
{
"placeholder": "Введите фамилию",
"type": "text",
"class": "text_form"
}
),
"email" : EmailInput(
attrs=
{
"placeholder" : "Введите почту",
"type" : "email",
"class" : "text_form"
}
),
"password" : PasswordInput(
attrs=
{
"placeholder" : "Введите пароль",
"type" : "password",
"class" : "text_form"
}
)
}
views.py
from django.shortcuts import render
from .forms import FoodForm, RegisterationUserForm
from .models import Recipe
def index(request):
card_info = Recipe.objects.all()
return render(request, "food/main.html", {"cards": card_info})
def create(request):
if request.method == "POST":
form = FoodForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return render(request, 'food/true.html')
else:
return render(request, 'food/test.html')
form = FoodForm()
context = {
"form": form
}
return render(request, "food/crate.html", context)
def registrationUserView(request):
if request.method == "POST":
form = RegisterationUserForm(request.POST)
if form.is_valid():
form.save()
return render(request, 'food/true.html')
else:
return render(request, 'food/test.html')
form = RegisterationUserForm()
context = {
"form": form
}
return render(request, "food/registration.html", context)
registration_base.html
{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="{% static 'css/registration_css.css' %}">
<title>HTML5</title>
</head>
<body>
<div class = "content">
<div class = "nav_div">
<div class="nav">
<li><button class = "nav_btn">Рецепты</button></li>
<li><button class = "nav_btn">Вход</button></li>
</div>
</div>
{% block content %}{% endblock %}
</div>
</body>
</html>
registration_with_Jinja.html
{% extends 'food/registration.html' %}
{% load static %}
{% block content %}
<form action="" method="post">
{% csrf_token %}
{{form.first_name}}
{{form.last_name}}
{{form.email}}
{{form.password}}
<button type = "submit">Зарегистрироваться</button>
</form>
{% endblock %}
Вместо ModelForm вы можете использовать UserCreationForm, предоставляемую django для создания пользователя.
forms.py
// forms.py
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class RegistrationForm(UserCreationForm):
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
def __init__(self, *args, **kwargs):
super(UserCreationForm, self).__init__(*args, **kwargs)
self.fields['email'].widget.attrs['class'] = 'classnames' // add your custom classes to style form fields
self.fields['email'].widget.attrs['placeholder'] = 'Email'
self.fields['username'].widget.attrs['class'] = 'classnames'
self.fields['username'].widget.attrs['placeholder'] = 'Username'
self.fields['password1'].widget.attrs['class'] = 'classnames'
self.fields['password1'].widget.attrs['placeholder'] = 'Password'
self.fields['password2'].widget.attrs['class'] = 'classnames'
self.fields['password2'].widget.attrs['placeholder'] = 'Confirm Password'
views.py
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
return redirect('home')
else:
form = RegistrationForm()
context = {
'title': 'Register',
'form': form
}
context = {
'form': form
}
return render(request, 'register.html', context=context)
register.html
<form method="post">
{% csrf_token %}
{% for field in form %}
{{ field }}
{% endfor %}
<button type="submit">Sign Up</button>
</form>
Добавление следующих строк кода в соответствующие файлы будет работать для регистрации пользователей.