账户/模型.py
from django.db import models
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django import forms
# Create your models here.
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True,label='email',error_messages={'exists':'This already exists'})
firstname = forms.CharField(required=True,label='firstname')
lastname = forms.CharField(required=True,label='lastname')
class Meta:
model = User
fields = ('firstname','lastname','username','email','password1','password2')
def __init__(self, *args, **kwargs):
super(UserCreateForm, self).__init__(*args, **kwargs)
self.fields['firstname'].widget.attrs['placeholder'] = 'First Name'
self.fields['lastname'].widget.attrs['placeholder'] = 'Last Name'
self.fields['username'].widget.attrs['placeholder'] = 'Username'
self.fields['email'].widget.attrs['placeholder'] = 'Email'
self.fields['password1'].widget.attrs['placeholder'] = 'Password'
self.fields['password2'].widget.attrs['placeholder'] = 'Confirm Password'
def save(self, commit=True):
user = super(UserCreateForm,self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
def clean_email(self):
if User.objects.filter(email=self.cleaned_data['email']).exists():
raise forms.ValidationError(self.fields['email'].error_messages['exists'])
return self.cleaned_data['email']
帐户/视图.py
from django.shortcuts import render
# Create your views here.
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User, auth
from accounts.models import UserCreateForm
from django.http import JsonResponse
import random
from django.core.mail import send_mail
from django.conf import settings
def registerpage(request):
if request.method == 'POST':
#login
form = UserCreateForm(request.POST)
if form.is_valid():
new_user = form.save()
new_user = authenticate(
username = form.cleaned_data['username'],
password = form.cleaned_data['password1'],
)
login(request, new_user)
return redirect('home')
else:
#registration
form = UserCreateForm()
context = {'form':form}
return render(request, 'store/auth/register.html', context)
账户/urls.py
from django.urls import path,include
from . import views
urlpatterns = [
path('register', views.registerpage, name='register'),
path('', include('django.contrib.auth.urls')),
]
父项目根文件夹的urls.py
"""
URL configuration for quality-traders project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/5.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('store.urls')),
path('accounts/', include('accounts.urls')),
]
urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
注册.html
{% extends "store/layouts/main.html" %}
{% block content %}
<section id="form" style="margin-left: 25%;"><!--form-->
<div class="container">
<div class="col-sm-4 col-sm-offset-1 ">
<div class="signup-form"><!--sign up form-->
<h2>New User Signup!</h2>
<form method="post">
{% csrf_token %}
{% for field in form %}
{{ field.errors }}
<p>{{field}}</p>
{% endfor %}
<button type="submit" class="btn btn-default">Signup</button><br>
<div class="d-flex justify-content-center links">
Already have an account?
<a href="{% url 'login' %}">Login</a>
</div>
</form>
</div><!--/sign up form-->
</div>
</div>
</section><!--/form-->
{% endblock content %}
登录.html
{% extends "store/layouts/main.html" %}
{% block content %}
<section id="form " style="margin-left: 25%;"><!--form-->
<div class="container">
<div class="col-sm-4 col-sm-offset-1 ">
<div class="signup-form"><!--sign up form-->
<h2>User Login!</h2>
<form method="post">
{% csrf_token %}
{% for field in form %}
{{ field.errors }}
<p>{{field}}</p>
{% endfor %}
<button type="submit" class="btn btn-default">Login</button><br>
<div class="d-flex justify-content-center links">
Already have an account?
<a href="{% url 'login' %}">Sign Up</a>
</div>
</form>
</div><!--/sign up form-->
</div>
</div>
</div>
</section><!--/form-->
{% endblock content %}
设置.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates')
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
我通过观看教程创建了这个电子商务网站,https://youtube.com/playlist?list=PLTV1jAY3nKHOqKs4uDaBOdqL3jKK7fjSo&si=h5Hl6NapOuWZvjIa。
他用单一视图创建了注册和登录。他创建了仅用于注册的模板网址。登录和注销来自于,
path('accounts/', include('django.contrib.auth.urls')),
他没有使用任何单独的应用程序进行身份验证和授权。但是我愿意。冲突发生了。
我尝试使用实现登录和注销,
path('', include('django.contrib.auth.urls')),
我认为 accounts/ 会自动出现,因为 urls.py 是帐户应用程序的一部分。
如何解决这个问题?
问题出在模板目录上。 login.html 位于模板内的 store->auth 文件夹中。
Django 正在模板的 registration 文件夹中搜索它。
所以我创建了一个注册文件夹并向其中添加了登录和注册模板。
谢谢你。