Django change view, которое объединяется с `http://127.0.0.1:8000/login/`.
Я пытаюсь изменить опыт входа/подписки в моем проекте django.
Для этого я сделал следующее:
- I created a dedicated app
mysuermodelthat I using to handling authentication et cetera. - I changed the user_mode to remove username as unique id and put email address.
- I created a dedicated
form,viewandhtmlto 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']