慕课网-Django入门到进阶-更适合Python小白的系统课程-第7章Django中的用户权限的基本使用-7-7用户登录验证授权练习bootstrap实践(2)

第7章 Django 中的用户权限的基本使用

7-7 用户登录验证授权练习 bootstrap 实践(2)

1.在项目 message_test 下目录 app,修改文件 forms.py,修改类 RegisterForm

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import jieba

from django import forms
from django.contrib.auth.models import User
from .consts import MessageType, SensitiveWordInit

MESSAGE_TYPE_CHOICES = tuple ([(message.value, message.value) for message in MessageType])

class RegisterForm(forms.Form):
    username = forms.CharField(widget=forms.TextInput)
    password = forms.CharField(widget=forms.PasswordInput)
    check_password = forms.CharField(widget=forms.PasswordInput)

    def clean(self):
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')
        check_password = self.cleaned_data.get('check_password')

        if not username:
            raise forms.ValidationError('缺少用户名')

        if not password or not check_password:
            raise forms.ValidationError('缺少密码')

        if password != check_password:
            raise forms.ValidationError('两次密码不一致')

        exists = User.objects.filter(username=username).only()
        if exists:
            raise forms.ValidationError('该用户已存在:{}'.format(username))

        user = User.objects.create_user(username=username, password=password)
        user.save()

        return self.cleaned_data

class MeeageForm(forms.Form):
    content = forms.CharField(label='消息内容', max_length=100, required=True)
    message_type = forms.CharField(
        label='数据类型',
        max_length=10,
        widget=forms.Select(choices=MESSAGE_TYPE_CHOICES)
    )

    def clean_message_type(self):
        message_type = self.cleaned_data.get('message_type')
        if not message_type:
            raise forms.ValidationError('消息类型不能为空!')
        try:
            message_type_obj = MessageType[message_type]
        except:
            raise forms.ValidationError('无效的消息类型')
        return message_type_obj

    def clean_message(self):
        content = self.cleaned_data.get('content')
        if not content:
            raise forms.ValidationError('消息不能为空')
        cut_message = jieba.lcut(content)
        check = list(set(cut_message) & set(SensitiveWordInit))
        if check:
            raise forms.ValidationError('该消息设计违禁词汇,已被屏蔽')
        return content

2.在项目 message_test 下目录 app,修改文件 views.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-


import time

from django.views.generic import View
from django.shortcuts import render, redirect, reverse
#from django.http import HttpResponse
from .models import Message
from .consts import MessageType
from .forms import MeeageForm, RegisterForm

class Register(View):
    TEMPLATE = 'register.html'

    def get(self, request):
        data = {}
        return render(request, self.TEMPLATE, data)

    def post(self, request):
        data = {}
        form = RegisterForm(request.POST)
        data['error'] = form.non_field_errors
        if not form.is_vaild():
            return render(request, self.TEMPLATE, data)
        return redirect(reverse('five'))

class LessionThree(View):
    TEMPLATE = 'three.html'
    def get(self, request, message_type):
        data = {}
        try:
            message_type_obj = MessageType[message_type]
        except Exception as e:
            data['error'] = '没有这个消息类型 {}'.format(e)
            return render(request, self.TEMPLATE, data)
        message = request.GET.get('message', '')

        if not message:
            data['error'] = '消息不可为空'
            return render(request, self.TEMPLATE, data)

        data['message'] = message
        data['message_type'] = message_type_obj

        return render(request, self.TEMPLATE, data)

class LessionFourPageOne(View):
    TEMPLATE = 'four_page_one.html'
    def get(self, request, message_type):
        data = {}
        try:
            message_type_obj = MessageType[message_type]
        except Exception as e:
            data['error'] = '没有这个消息类型 {}'.format(e)
            return render(request, self.TEMPLATE, data)

        message = request.GET.get('message', '')
        if not message:
            data['error'] = '消息不可为空'
            return render(request, self.TEMPLATE, data)

        Message.objects.create(
            content=message,
            message_type=message_type_obj.value,
            created_time=time.time()
        )

        return redirect(reverse('fourpagetwo'))

class LessionFourPageTwo(View):
    TEMPLATE = 'four_page_two.html'
    def get(self, request):
        data ={}
        search = request.GET.get('search', '')
        if search:
            messages = Message.objects.filter(content__contains=search)
        else:
            messages = Message.objects.all()
        data['messages'] = messages
        return render(request, self.TEMPLATE, data)

class LessionFive(View):
    TEMPLATE = 'five.html'

    def get(self, request):
        data = {}
        data['form'] = MeeageForm()
        return render(request, self.TEMPLATE, data)

    def post(self, request):
        form = MeeageForm(request.POST)
        if not form.is_valid():
            return render(request, self.TEMPLATE, {'form':form})
        content = form.cleaned_data.get('content')
        message_type = form.cleaned_data.get('message_type')
        Message.objects.create(
            content=content,
            message_type=message_type.value,
            created_time=time.time()
        )
        return redirect(reverse('fourpagetwo'))

3.在项目 message_test 下目录 templates,修改文件 register.html,添加 error

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <style>
        .form-area {
            width: 50%;
            margin: 10% auto;
        }
    </style>
</head>
<body>
<form class="form-area" action="{% url 'register' %}" method="post">
    {% csrf_token %}
    <div class="form-group">
        <label for="username">username</label>
        <input type="text" class="form-control" id="username" name="username" placeholder="username" />
    </div>
    <div class="form-group">
        <label for="password">Password</label>
        <input type="password" class="form-control" id="password" name="password" placeholder="password" />
    </div>
    <div class="form-group">
        <label for="check_password">Check Password</label>
        <input type="password" class="form-control" id="check_password" name="check_password" placeholder="check password" />
    </div>
    <button type="submit" class="btn btn-default">Submit</button>
    <span>{{error}}</span>
</form>
</body>
</html>

4.测试

 

posted on 2020-02-15 10:42  herisson_pan  阅读(3)  评论(0)    收藏  举报

导航