慕课网-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) 收藏 举报
浙公网安备 33010602011771号