Показать статистику
0 голосов
от (2.3тыс. баллов)

Добрый день! У меня проблема с регистрацией пользователей на сайте, перепробовал много способов просмотренных в интернете, но сделал что-то похожее, но не работает. Я понимаю, что это может быть не рабочий метод, или я его неправильно спроектировал. Не могли бы вы дать мне совет, как зарегистрировать или исправить ошибки в моем коде? Заранее спасибо!

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 %}
330 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)

Вместо 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>

Добавление следующих строк кода в соответствующие файлы будет работать для регистрации пользователей.


...