一、系统User模型类
导入:
views.py
from django.contrib.auth.models import User
(1) 用户的创建
from django.contrib.auth.models import User
u= User.objects.create_user(req.POST.get('username'),req.POST.get('email'),req.POST.get('userpass'))
对象的保存
u.save()
(2) 用户认证
导入:
from django.contrib.auth import authenticate
传入关键字参数进行用户的认证
u = authenticate(username=req.POST.get('username'),password=req.POST.get('userpass'))
认证结果
- 认证成功返回对象
- 认证失败返回None
(3) 维持用户登录状态
导入:
from django.contrib.auth import login
实例
u = authenticate(username=req.POST.get('username'),password=req.POST.get('userpass'))
if u:#验证通过
if u.is_active: #并且账户激活
login(req,u) #处理登录 状态保持 使用的依然是session
return redirect(reverse('App:index'))
return HttpResponse('authenticate用户认证')
(4) 在模板和视图函数中判断登录状态和获取登录者数据
index.html
{% if request.user.is_authenticated %} #登录则为True 否则为False
<h2>欢迎:{{ request.user.username }} | <a href="{% url 'App:logout' %}">退出登录</a></h2>
{% endif %}
views.py
def test(req):
# print(req.user.email)
if req.user.is_authenticated:
print(req.user.email) #如果登录则取出登录者的邮箱信息
else:
print('你没有登录') #输出没登录
return HttpResponse('测试request.user属性')
(5) 登录的限制 login_required
限制某些路由必须登录才能访问
导入:
from django.contrib.auth.decorators import login_required
实例:
@login_required(login_url='/login/')
def test(req):
return HttpResponse('当前路由必须登录才能进行访问')
(6) 如果是从login_required重定向到登录模板 则登录成功后在跳转回去 否则去首页
实例:
def Login(req):
if req.method == 'GET':
req.session['next'] = req.GET.get('next','/') #/test/ /
return render(req,'djangouser/login.html')
if req.method == 'POST':
...
return redirect(req.session.get('next'))
(7) 修改密码
from django.contrib.auth.hashers import make_password
#修改密码
def update_password(req):
u = authenticate(username='zhangsan', password='123456')
# print(u)
if u:
if u.is_active:
u.password = make_password('123456')
u.save()
return HttpResponse('修改成功')
二、自定义用户模型
给user模型添加phone和icon字段
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
phone = models.CharField(max_length=11,default='15611833906')
icon = models.CharField(max_length=70,default='default.jpg')
views.py代码修改如下 其余不变
from App.models import User
三、将用户认证进行重写 实现可以手机号码和用户名都能登录
在App下新建auth.py文件 添加如下代码
from django.contrib.auth.backends import ModelBackend
from App.models import User
class MyBackend(ModelBackend):
def authenticate(self,username=None,password=None):
user = None
try:
user = User.objects.get(username=username)
except:
try:
user = User.objects.get(phone=username)
except:
return
if user.check_password(password):
return user
return False
在setting.py文件中 指定使用自定义的验证方法 authenticate
#指定用户认证使用自己定义的认证类
AUTHENTICATION_BACKENDS = ('App.auth.MyBackend',)
四、配置静态资源
静态资源: 图片、css、js
通常静态资源文件放在 static目录下
目录结构:
project/
App/
templates/
static/
img/
css/
js/
upload/
project/
manage.py
(1) 在App下创建static静态资源目录
project/
App/
static/
img/
bzs.jpeg
在settings.py文件中 已经默认配置好了
STATIC_URL = '/static/'
在模板中使用
{% load static %} #加载static标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>首页</h1>
<img src="/static/img/bzs.jpeg" alt="">
<img src="{% static 'img/bzs.jpeg' %}" alt="">
</body>
</html>
注意: 如果static静态资源目录存放在根目录下 则静态资源加载失败
(2) 将static创建在项目的根目录下
更改setting.py的配置
在settings.py文件中添加如下代码
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
模板中代码同上 不做任何改变 static在App下或者在根目录下 都正常展示
评论 (0)