ittadoru
@ittadoru
Новичок Python

Как передать две функции в url запрос?

Хочу сделать форму регистрации и форму авторизации на одной странице, с помощью js сделать красиво, но в файле Urls.py нужно будет в url path занести две функции, регистрацию и авторизацию, вот как сейчас в urls.py:

from django.urls import path
from users.views import login, registration,  profile, logout

app_name = 'users'

urlpatterns = [
    path('login', login, name='login'),
    path('registration', registration, name='registration'),
    path('profile', profile, name='profile'),
    path('logout', logout, name='logout'),
]


Как объединить логин и регистрацию в один path, или есть альтернативный выход, для которого нужно поменять формы:

from django.contrib.auth.forms import AuthenticationForm, UserCreationForm, UserChangeForm
from users.models import User
from django import forms




class UserLoginForm(AuthenticationForm):
    username = forms.CharField(widget=forms.TextInput(attrs={
        'class': 'login-content-input',
        'placeholder': 'Логин',
        'id': 'login'
    }))
    password = forms.CharField(widget=forms.PasswordInput(attrs={
        'class': 'login-content-input',
        'placeholder': 'Пароль',
        'id': 'password',
    }))

    class Meta:
        model = User
        fields = ['username', 'password']


class UserRegistrationForm(UserCreationForm):
    last_name = forms.CharField(widget=forms.TextInput(attrs={
        'class': 'reg-content-input',
        'placeholder': 'Фамилия',
    }))

    first_name = forms.CharField(widget=forms.TextInput(attrs={
        'class': 'reg-content-input',
        'placeholder': 'Имя',
    }))

    username = forms.CharField(widget=forms.TextInput(attrs={
        'class': 'reg-content-input',
        'placeholder': 'Имя пользователя',
    }))

    email = forms.CharField(widget=forms.EmailInput(attrs={
        'class': 'reg-content-input',
        'placeholder': 'E-mail',
    }))

    password1 = forms.CharField(widget=forms.PasswordInput(attrs={
        'class': 'reg-content-input',
        'placeholder': 'Пароль',
    }))

    password2 = forms.CharField(widget=forms.PasswordInput(attrs={
        'class': 'reg-content-input',
        'placeholder': 'Ещё раз',
    }))

    class Meta:
        model = User
        fields = [
            'last_name', 'first_name', 'username', 'email', 'password1', 'password2'
        ]


или же поменять во views.py:

def login(request):
    if request.method == 'POST':
        form = UserLoginForm(data=request.POST)
        if form.is_valid():
            username = request.POST['username']
            password = request.POST['password']
            user = auth.authenticate(username=username, password=password)
            if user:
                auth.login(request, user)
                return HttpResponseRedirect(reverse('main'))

    else:
        form = UserLoginForm()
    context = {
        'title': 'Burch - Авторизация',
        'form': form
    }
    return render(request, 'login.html', context)

def registration(request):
    if request.method == 'POST':
        form = UserRegistrationForm(data=request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, 'Вы успешно зарегистрировались')
            return HttpResponseRedirect(reverse('users:login'))
    else:
        form = UserRegistrationForm()
    context = {
        'title': 'Burch - Регистрация',
        'form': form
    }
    return render(request, 'registration.html', context)


если мало информации, скажите, я просто не маэстро, и даже не среднячок в программировании, буду рад исправить свои ошибки
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Kadabrov
Хочу сделать форму регистрации и форму авторизации на одной странице, с помощью js сделать красиво, но в файле Urls.py нужно будет в url path занести две функции, регистрацию и авторизацию, вот как сейчас в urls.py:

не нужно делать 2 функции в один урл, сделайте в js 2 формы, которые будут отправлять post запрос на нужный урл, если форма регистрации то на урл registration, если логин, то на урл login
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы