慕课网-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)    收藏  举报

导航