Django 小项目实战
7. 小项目实战
7.1 环境准备
- 创建 djanjo 文件
-
创建子应用
python .\manage.py startapp app
-
创建子应用 urls.py
from django.urls import path, include
urlpatterns = [
path('', )
]
- 配置主路由 urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app.urls'))
]
- 修改settings.py
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app',
]
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = False
7.2 创建 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 = 'yellow'
MessageType.error.color = 'gray'
MessageType.danger.color = 'red'
SensWords = ['可爱', '呆萌', '天气']
7.3 view.py
from django.shortcuts import render
# Create your views here.
from django.views import View
from app.consts import MassageType
class Index(View):
def get(self, request, massage_type):
data = {}
try:
massage_type_obj = MassageType[massage_type] # 尝试获取消息类型
except:
data['error'] = '没有这个消息类型'
return render(request, 'index.html', data)
massage = request.GET.get('massage', '') # 获取用户浏览器 url ?号变量名 (massage) 传参
if not massage:
data['error'] = '消息不可为空'
return render(request, 'index.html', data)
data['massage'] = massage
data['massage_type'] = massage_type_obj
return render(request, 'index.html', data)
7.4 创建过滤
- app
- templeatetags
- myfilter
- templeatetags
import jieba
from django import template
from app.consts import SensWords
register = template.Library()
# 完全屏蔽
@register.filter
def simple_check(value):
cut_massage = jieba.cut(value)
check = list(set(cut_massage) & set(SensWords))
if check:
return "该消息涉及敏感信息"
return value
# 敏感词换成 * 号
@register.filter(name='deep_check')
def deep_check(value):
cut_massage = jieba.cut(value)
new_massage = []
for i in cut_massage:
if i in SensWords:
new_massage.append('*')
else:
new_massage.append(i)
if new_massage:
return ''.join(new_massage)
return value
7.5 index.html
{% load myfilter %} # 必须导入自定义的过滤器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
{% if error %}
<h3>{{ error }}</h3>
{% else %}
<h2 style="color: {{ massage_type.color }}">{{ massage }}</h2>
<br>屏蔽敏感词:
<h2 style="color: {{ massage_type.color }}">{{ massage|deep_check }}</h2>
<br>完全屏蔽:
<h2 style="color: {{ massage_type.color }}">{{ massage|simple_check }}</h2>
{% endif %}
</body>
</html>
7.6 urls.py
from django.urls import path
from .views import Index
urlpatterns = [
path('index/<str:massage_type>', Index.as_view())
]