慕课网-Django入门到进阶-更适合Python小白的系统课程-第9章dashboard后端的搭建与开发-9-8登陆验证客户用户表现视频表创建外链视频功能开发-上(1)_注销功能有问题,登录的链接名跟原视频不一致
第9章 dashboard后端的搭建与开发
9-8 登陆验证客户用户表现视频表创建外链视频功能开发-上(1)
基本工作
1.登录验证装饰器的开发
2.客户端用户表结构的创建以及基本方法的初始化(并不测试,在开发客户端的时候一并开发测试)
3.视频表结构的搭建以及外链视频功能的开发
实例
1.在项目 video 下目录 app,新建 Python 包 util
2.在项目 video 下目录 app/util,新建文件 permission.py
# coding:utf-8
import functools
from django.shortcuts import redirect, reverse
def dashboard_auth(func):
@functools.wraps(func)
def wrapper(self, request, *args, **kwargs):
user = request.user
if not user.is_authenticated or not user.is_superuser:
return redirect('{}?to={}'.format(reverse('dashboard_login'), request.path))
return func(self, request, *args, **kwargs)
return wrapper
3.在项目 video 下目录 app/dashboard/views,修改文件 auth.py
# coding:utf-8
from django.views.generic import View
from django.shortcuts import redirect, reverse
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.models import User
from django.core.paginator import Paginator
from app.libs.base_render import render_to_response
from app.utils.permission import dashboard_auth
class Login(View):
TEMPLATE = 'dashboard/auth/login.html'
def get(self, request):
if request.user.is_authenticated:
return redirect(reverse('dashboard_index'))
to = request.GET.get('to', '')
data = {'error': ''}
return render_to_response(request, self.TEMPLATE, data=data)
def post(self, request):
username = request.POST.get('username')
password = request.POST.get('password')
to = request.GET.get('to', '')
data = {}
exists = User.objects.filter(username=username).exists()
data['error'] = '没有该用户'
if not exists:
return render_to_response(request, self.TEMPLATE, data=data)
user = authenticate(username=username, password=password)
if not user:
data['error'] = '密码错误'
return render_to_response(request, self.TEMPLATE, data=data)
if not user.is_superuser:
data['error'] = '你无权登录'
return render_to_response(request, self.TEMPLATE, data=data)
login(request, user)
if to:
return redirect(to)
return redirect(reverse('dashboard_index'))
class Logout(View):
def get(self, request):
logout(request)
return redirect(reverse('dashboard_login'))
class AdminManger(View):
TEMPLATE = 'dashboard/auth/admin.html'
@dashboard_auth
def get(self, request):
users = User.objects.all()
page = request.GET.get('page', 1)
p = Paginator(users, 2)
total_page = p.num_pages
if int(page) <= 1:
page = 1
current_page = p.get_page(int(page)).object_list
data = {'users': current_page, 'total': total_page, 'page_num': int(page)}
return render_to_response(request, self.TEMPLATE, data)
class UpdateAdminStatus(View):
def get(self, request):
status = request.GET.get('status', 'on')
_status = True if status == 'on' else False
request.user.is_superuser = _status
request.user.save()
return redirect(reverse('admin_manger'))
4.在项目 video 下目录 app,新建 Python 包 model
5.在项目 video 下目录 app/model,新建文件 auth.py
# coding:utf-8
from django.db import models
class ClientUser(models.Model):
username = models.CharField(max_length=50, null=False, unique=True)
password = models.CharField(max_length=255, null=False)
avatar = models.CharField(max_length=500, default='')
gender = models.CharField(max_length=10, default='')
birthday = models.DateTimeField(null=True, blank=True, default=None)
status = models.BooleanField(default=True, db_index=True)
created_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return 'username:{}'.format(self.username)
posted on 2020-02-23 08:28 herisson_pan 阅读(6) 评论(0) 收藏 举报
浙公网安备 33010602011771号