Django change view, которое объединяется с `http://127.0.0.1:8000/login/`.

Я пытаюсь изменить опыт входа/подписки в моем проекте django.

Для этого я сделал следующее:

  1. I created a dedicated app mysuermodel that I using to handling authentication et cetera.
  2. I changed the user_mode to remove username as unique id and put email address.
  3. I created a dedicated form, view and html to allow users to sign-in and/or sign-up.

Однако, я думаю, что я был неаккуратен в своих действиях, поскольку некоторые вещи не сходятся.

Больше всего я не могу найти способ удалить представление, которое сейчас находится по адресу http://127.0.0.1:8000/login/ (представление по умолчанию django login).

Я попробовал следующее решение, но когда я нажимаю /login, я все равно попадаю в представление по умолчанию. Есть помощь?

основной url-файл приложения

from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import RedirectView


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('action.urls')),
    path('r/', include('urlshortener.urls')),
    path('myusermodel/',include('myusermodel.urls')),
    path('login/',RedirectView.as_view(url='myusermodel', permanent=False), name='index'),
    path('accounts/', include('allauth.urls')),

myusermodel url файл

from django.urls import path
from myusermodel.views import sign_up
from myusermodel.views import sign_in

app_name = 'myusermodel'

urlpatterns = [
    # login
    path('signup/', sign_up.sign_up, name='sign_up'),
    path('signin/', sign_in.sign_in, name='sign_in'),

]

знак в поле зрения

from django.shortcuts import render,redirect
from myusermodel.forms.SignInForm import SignInForm
from django.contrib.auth import authenticate, login
from myusermodel.models import CustomUser



def sign_in(request):


    form = SignInForm()
    context = {
        'form': form
    }

    if request.user.is_authenticated:
        return redirect('action:home')

    if request.method == 'POST':
        form = SignInForm(data=request.POST)
        if form.is_valid():
            if CustomUser.objects.filter(email=form.cleaned_data.get('email')).exists():
                email = form.cleaned_data.get('email')
                password = form.cleaned_data.get('password')
                user = authenticate(email=email,password=password)
                if user is not None:
                    login(request,new_user)
                    return redirect('action:home')
                else:
                    context['password_error'] = True
                    print('password_error')
            else:
                context['user_error'] = form.cleaned_data.get('email')
                print('user_error')


    return render(request, 'myusermodel/sign_in.html', context)

подписать форму

from django.contrib.auth.forms import AuthenticationForm
from myusermodel.models import CustomUser
from django import forms


class SignInForm(AuthenticationForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.fields.pop('username')

        self.fields['email'].widget.attrs.update({
            'class': 'form-input',
            'required':'',
            'name':'email',
            'id':'email',
            'type':'email',
            'placeholder':'JohnDoe@mail.com',
            })
        self.fields['password'].widget.attrs.update({
            'class': 'form-input',
            'required':'',
            'name':'password',
            'id':'password',
            'type':'password',
            'placeholder':'password',
            'maxlength':'22',
            'minlength':'8'
            })


    email = forms.EmailField(max_length=100)

    class Meta:
        model = CustomUser
        fields = ['email', 'password']

Вернуться на верх