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

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

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

1.在项目 message_test 下目录 app,修改文件 views.py,添加类 Register

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

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

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

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'))

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

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

from django.urls import path
from .views import (LessionThree, LessionFourPageOne,
                    LessionFourPageTwo, LessionFive, Register)

urlpatterns = [
  path('three/<str:message_type>', LessionThree.as_view(), name='three'),
  path('fourPageOne/<str:message_type>', LessionFourPageOne.as_view()),
  path('fourPageTwo', LessionFourPageTwo.as_view(), name='fourpagetwo'),
  path('five', LessionFive.as_view(), name='five'),
  path('register', Register.as_view(), name='register'),
]

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

<!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">
</head>
<body>

</body>
</html>

4.在项目 message_test 下命令行窗口开启服务

python manage.py runserver

5.测试

6.在项目 message_test 下目录 templates,修改文件 register.html 

<!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">
    <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>
</form>
</body>
</html>

7.测试

8.在项目 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('两次密码不一致')

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  

9.在项目 message_test 下目录 app,修改文件 views.py,修改类 Register 添加方法 post

#!/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

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

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

    def post(self, request):
        pass

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'))

  

posted on 2020-02-15 09:36  herisson_pan  阅读(6)  评论(0)    收藏  举报

导航