arr[0]="../static/img/character1.png";
‘builtins’:[‘django.templatetags.static’],
位置如下:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'builtins':['django.templatetags.static'],
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
模型建立
ERRORS: booksmodels.Books.one_contain: (fields.E120) CharFields must define a 'max_length' attribute.
Cannot resolve keyword 'user_id' into field. Choices are: date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, myuser, password, user_permissions, username
urlpatterns = []
加入页面路由:如path('', include('index.urls'), name="index"),
或者path('about-section/', include('about-section.urls'), name="about-section"),
这里的name可以在分别的子app中设置app_name即可绑定 'index',
'about_section',
'environmental_protection',
'memorabilia',
创建文件夹index,新建urls.py文件,添加代码:
from django.urls import path
from index import views
app_name = "index"
urlpatterns = [
path('', views.index,name='index'),#进入该界面后不输入任何
]
新建views.py文件:
from django.shortcuts import render
def index(request):
return render(request,'index.html')
现在可以显示首页内容了,但样式等信息没有
STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
{% load static %}
DATABASES = {
'default': {
# 数据库的类型
'ENGINE': 'django.db.backends.mysql',
# 所使用的数据库的名字
'NAME': 'graduation_project',
# 数据库服务器的用户
'USER': 'root',
# 密码
'PASSWORD': '1234',
# 主机
'HOST': '127.0.0.1',
# 端口
'POST': '3306',
}
}
import pymysql
pymysql.install_as_MySQLdb()
from django.contrib import admin
from .models import MyUser
# Register your models here.
class MyUserAdmin(admin.ModelAdmin):
list_display = ("id","card_whether")
# admin.site.register(FrontUser)
# Register your models here.
admin.site.register(MyUser, MyUserAdmin)
apps.py
from django.apps import AppConfig
class MyUsersConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'my_users'
models.py
from django.db import models
from django.contrib.auth.models import User
class MyUser(models.Model):
user_id = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name="用户")
# name = models.CharField(max_length=20,unique=True, verbose_name="用户名") #verbose_name把后台显示改成中文
# user_password=models.CharField(max_length=30,verbose_name="用户密码")
card_whether=models.BooleanField(default=True, verbose_name="身份证验证标识符")
class Meta:
verbose_name = "网页登录用户"
verbose_name_plural = verbose_name
def __str__(self):
return self.user_id.username
做了以上操作千万不要忘记在settings中的INSTALLED_APPS添加你所新建的文件夹哦!
现在在admin界面就有你所创建的用户类了。
<form method="post">
{
% csrf_token %}
<div class="close-btn" onclick="signup()">
×
</div>
<h1>注册</h1>
<div class="input-field"><input type="text" name="username" placeholder="用户名" class="validate"></div>
<div class="input-field"><input type="password" name="pw1" placeholder="密码" class="validate"></div>
<div class="input-field"><input type="password" name="pw2" placeholder="确认密码" class="validate"></div>
<button type="submit" class="second-button">注册</button>
<p>我有账号,回到<a onclick="togglePopup();signup()" href='javascript:;'>登录</a></p>
</form>
登录:
<form method="post">
{
% csrf_token %}
<div class="close-btn" onclick="togglePopup()">
×
</div>
<h1>登录</h1>
<div class="input-field"><input type="text" name="username" placeholder="用户名" class="validate"></div>
<div class="input-field"><input type="password" name="password" placeholder="密码" class="validate"></div>
<button type="submit" class="second-button">登录</button>
<p>你没有账号? <a onclick="signup();togglePopup()" href='javascript:;'>注册</a></p>
</form>
from django.apps import AppConfig
class RegistrationConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'index'
views.py
from django.shortcuts import render
from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect
from django.shortcuts import render, redirect
from index.forms import FormRegistration
from django.contrib import messages
def index(request):
if request.method == 'GET':
return render(request, 'index.html')
if request.method == 'POST':
form = FormRegistration(request.POST)
if form.is_valid():
# 把数据保存到数据库
# 伪提交
front_user = form.save(commit=False)
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("pw2")
user = User(username=username, password=make_password(password))
user.save()
front_user.user_id = user
front_user.save()
messages.success(request, "注册成功!请在点击个人中心进行登录!")
return HttpResponseRedirect('/')
else:
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("pw2")
if username is None:
messages.success(request, "注册失败!用户名为空!")
return render(request, 'index.html')
messages.success(request, "注册失败!密码输入错误!")
print(form.errors.get_json_data())
return render(request, 'index.html')
forms.py
# 登录页面form文件
from django import forms
from django.http import HttpResponse
from my_users.models import MyUser
class FormRegistration(forms.ModelForm):
username = forms.CharField(max_length=10, min_length=1)
pw1 = forms.CharField(max_length=20, min_length=6)
pw2 = forms.CharField(max_length=20, min_length=6)
class Meta:
model = MyUser
exclude=["user_id"]
def clean_username(self):
username=self.cleaned_data.get("username")
if username=="me":
raise forms.ValidationError("用户名不能是me!")
return username
def clean(self):
clened_data=super().clean()
pw1=clened_data.get("pw1")
pw2=clened_data.get("pw2")
if pw1!=pw2:
raise forms.ValidationError("两次密码输入不一致!!")
return clened_data
path('logout/', views.logout, name='index'), # 退出登录
def logout(request):
# 实现退出功能
# 删除session
if 'username' in request.session:
del request.session['username']
resp = HttpResponseRedirect('/')
# 删除cookie
if 'username' in request.COOKIES:
resp.delete_cookie('username')
auth.logout(request)
messages.success(request, "已退出登录")
return resp
绑定html标签:
<a class="out" href='/personal_center/logout'>
<p>退出登录</p>
</a>
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
判断是否登录:
if request.user.is_authenticated():
判断登录进入个人中心页面,未登录提示需要登录:
def personal(request):
if request.user.is_authenticated():
return HttpResponseRedirect('/')
else:
messages.success(request, "请先进行登录!")
return HttpResponseRedirect('/')
path('personal/', views.personal, name='index'),
<li><a onclick="togglePopup()" target="_blank" href="/personal_center">个人中心</a></li>
用户名:{ { request.user }}
auth.login(request, user)
return render(request, 'index.html')
return HttpResponseRedirect('/')
return redirect('/index/')
return redirect('/personal_center', context={