第三天学习:
1、创建一个项目
2、创建一个子应用 index,并在 setting.py 中注册子应用
3、创建视图函数 views.py
from django.shortcuts import render
from .consts import MessageType
# Create your views here.
from django.views.generic import View
class Message(View):
def get(self,request,message_type):
data = {}
try:
message_type_obj = MessageType[message_type]
except:
data['error'] = '没有这个消息类型'
return render(request,'message.html',data)
message = request.GET.get('message','')
if not message:
data['error'] = '消息不能为空'
return render(request,'message.html',data)
data['message'] = message
data['message_type'] = message_type_obj
return render(request, 'message.html', data)
3、创建子应用的路由 urls.py,在根路由中引入子路由
from django.urls import path
from .views import Message # 导入视图函数
urlpatterns = [
path('messages/<str:message_type>',Message.as_view()),
]
4、在子应用的目录下新建一个 python 包 templatetags 用于书写过滤器 mysecondfilter.py
# 创建一个违禁关键字检查过滤器
from django import template
# 导入违禁关键词列表
from index.consts import SenstiveWord
# 导入第三方方库用于切取字符串词组
import jieba
register = template.Library()
@register.filter
def simple_check(value):
cut_message = jieba.lcut(value)
check = list(set(cut_message) & set(SenstiveWord))
print(cut_message)
if check:
return '该消息涉及敏感内容,已被屏蔽'
return value
@register.filter(name='deep_check_message')
def deep_check(value):
cut_message = jieba.lcut(value)
new_message = []
for m in cut_message:
if m in SenstiveWord:
new_message.append('*')
else:
new_message.append(m)
if new_message:
return ''.join(new_message)
return value
5、新建一个违禁过滤词库 和枚举的类 consts.py
from enum import Enum # 枚举
#创建一个枚举的类
class MessageType(Enum):
info = 'info'
warning = 'warning'
error = 'error'
danger = 'danger'
# 添加属性
MessageType.info.label = '信息'
MessageType.warning.label = '警告'
MessageType.error.label = '错误'
MessageType.danger.label = '危险'
MessageType.info.color = 'green'
MessageType.warning.color = 'orange'
MessageType.error.color = 'gray'
MessageType.danger.color = 'red'
# 创建一个违禁关键词列表
SenstiveWord = ['暴力','恐怖','血腥']
6、在根目录下新建一个文件夹 templates 编写htmll 文件 message.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if error %}
<h3>error:{{error}}</h3>
{% else %}
<!--导入自定义的过滤器 mysecondfilter-->
{% load mysecondfilter %}
<span style="color:{{message_type.color}}">{{message.label}}---{{message|deep_check_message}}</span>
{% endif %}
</body>
</html>
7、最终效果: