域名反向解析:当路径发生改变后固定路径需要改变,通过反向解析可以自动寻找并修改
huasheng/urls.py下 添加namespace
url(r'^user/',include('user.urls',namespace='user')),
各应用urls.py下 添加name
url(r'^$', views.index,name='index'),
html模板中
<form action="{% url 'user:register' %}" method="POST">user找姓register找名
视图函数和类视图
views.py下
from django.shortcuts import render,redirect #redirect重定向
from django.core.urlresolvers import reverse #导入反向解析函数
from django.http import HttpResponse
from .models import User
from django.views.generic import View #导入View类
class RegisterView(View):
def get(self,request): #当method为get时执行
return render(request, 'register.html')
def post(self,request): #当method是post时执行
user_name = request.POST.get('user_name')
pwd = request.POST.get('pwd')
email = request.POST.get('email')
allow = request.POST.get('allow')
print(allow)
# 校验数据是否为空
if not all([user_name, pwd, email, allow]):
return HttpResponse('数据有为空的情况')
# 校验数据格式的情况
user = User.objects.create_user(username=user_name, email=email, password=pwd)
# username, email = None, password = None, ** extra_fields
user.is_active = 0 #将is_active属性改为0并保存
user.save()
return redirect(reverse('carlist:index')) #重定向到首页
urls.py下更改
url(r'register/',views.RegisterView.as_view(),name='register') #跳转到views.RegisterView.as_view()判断method
利用创建类的方式对默认表格进行修改
apps文件夹下创建db文件夹下base_model.py
from django.db import models
class BaseModel(models.Model):
is_delete = models.BooleanField(default=False,verbose_name='是否删除') #添加is_delete
create_time = models.DateTimeField(auto_now_add=True,verbose_name='创建时间') #添加create_time
class Meta:
abstract = True
#注册类
应用下models.py中
from db.base_model import BaseModel
from django.contrib.auth.models import AbstractUser
class User(AbstractUser,BaseModel): #让User类继承BaseModel类将新属性添加进默认表结构中
pass
###***注意迁移出错删库时不要忘记删除对应migrations文件
检查邮箱是否被注册
reemail = User.objects.filter(email=email)
if len(reemail)!=0:
return HttpResponse('邮箱已被注册')
更改密码界面
写好对应html,配置好url
veiw.py中添加新类ChangePwd
class ChangePwd(View):
def get(self,request):
return render(request, 'changepwd.html')
def post(self,request):
user_name = request.POST.get('user_name')
pwd = request.POST.get('pwd')
new_pwd = request.POST.get('new_pwd')
new_cpwd = request.POST.get('new_cpwd')
# print(allow)
# 校验数据是否为空
print(user_name)
print(pwd)
print(new_pwd)
print(new_cpwd)
if not all([user_name, pwd, new_pwd, new_cpwd]):
return HttpResponse('数据有为空的情况')
try:
user = User.objects.get(username = user_name)
except Exception:
return HttpResponse('账号不存在')
if new_pwd!=new_cpwd:
return HttpResponse('两次密码输入不一致')
if not user.check_password(pwd):
print(user)
return HttpResponse('密码错误')
# 校验数据格式的情况
user.set_password(new_pwd)
user.save()
# username, email = None, password = None, ** extra_fields
return redirect(reverse('carlist:index'))