django入门到精通⑧消息管理器和mysql数据库的互动
django入门到精通⑧消息管理器和mysql数据库的互动
1.message_test/settings.py配置
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app', 'app.templatetags', ] TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR + '/templates'], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'muke_lession_test', 'USER':'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': 3306 } }
总路由配置
message_test/urls.py
from django.contrib import admin from django.urls import path,include from app import urls as app_urls urlpatterns = [ path('admin/', admin.site.urls), path('', include(app_urls)) ]
2.常量的配置
app/consts.py
# _*_ coding:utf-8 _*_ # __author__ == 'jack' # __date__ == '2020-12-31 8:28 PM' from enum import Enum class MessageType(Enum): info = "info" warning = "warning" error = "error" danger = "danger" delete = "delete" 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' MessageType.delete.color = 'yellow' SensitiveWord = ['天气', '坏人', '不开心']
3.自定义过滤器的使用
app/templatetags/custom.py
# _*_ coding:utf-8 _*_ # __author__ == 'jack' # __date__ == '2020-12-31 9:03 PM' import jieba from django import template from app.consts import SensitiveWord import time register = template.Library() @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 SensitiveWord: new_message.append('*') else: new_message.append(m) if new_message: return ''.join(new_message) return value @register.filter def sample_check(value): # 自定义的关键词过滤器 cut_message = jieba.lcut(value) print(cut_message) print(SensitiveWord) check = list(set(cut_message) & set(SensitiveWord)) if len(check) != 0: return '该消息涉及违禁词汇,已被屏蔽' return value @register.filter def add_message_year(value, year): return '{} {}'.format(value, year) @register.filter def date_convert(value): timearray = time.localtime(value) otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timearray) return otherStyleTime
4.app/models.py的定义
# coding:utf-8 from django.db import models from .consts import MessageType class Message(models.Model): content = models.TextField() message_type = models.CharField(max_length=10, db_index=True) created_time = models.IntegerField(default=0) def __str__(self): return 'type:{}, content:{}'.format(self.message_type, self.content) @property def message_typ(self): try: return MessageType[self.message_type] except: return MessageType.info
5.路由定义
app/urls.py
# _*_ coding:utf-8 _*_ # __author__ == 'jack' # __date__ == '2020-12-29 8:27 PM' from django.urls import path from .views import LessionThree, LessionFourPageOne, LessionFourPageTwo, DeleteMessage, UpdateMessage urlpatterns = [ path('three/<str:message_type>', LessionThree.as_view(), name="three"), path('fourPageOne/<str:message_type>', LessionFourPageOne.as_view()), path('delete/', DeleteMessage.as_view()), path('update/', UpdateMessage.as_view()), path('fourPageTwo', LessionFourPageTwo.as_view(), name='fourpagetwo') ]
6.模板文件
templates/three.html {% load custom %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% if error %} <h3>error {{ error }}</h3> {% else %} <label style="color:{{ message_type.color }}">{{ message_type.label }}</label> <span style="color:{{ message_type.color }}">{{ message|deep_check_message|add_message_year:2020 }}</span> {% endif %} </body> </html> templates/four_page_one.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ error }} </body> </html> templates/four_page_two.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% load custom %} <h1>this page tow</h1> {% for message in messages %} <li style="color:{{ message.message_typ.color }}"> {{ message.id }} {{ message.content }} 时间:{{ message.created_time|date_convert }} <a href="http://127.0.0.1:8000/delete?id={{ message.id }}">删除</a> </li> {% endfor %} </body> </html>
视图app/views.py
# coding:utf-8 import time from django.views.generic import View # from django.http import HttpResponse from django.shortcuts import render, redirect, reverse from .consts import MessageType from .models import Message 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 HttpResponse(message_type) 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 DeleteMessage(View): def get(self, request): id = int(request.GET.get("id", 'no such id')) Message.objects.filter(id=id).delete() return redirect(reverse('fourpagetwo')) class UpdateMessage(View): TEMPLATE = 'four_page_one.html' def get(self, request): data = {} try: id = int(request.GET.get("id", 'no such id')) except Exception as e: data['error'] = '找不到这个消息{}'.format(e) return render(request, self.TEMPLATE, data) message = request.GET.get('message', '') print("message={}".format(message)) if not message: data['error'] = '消息不可为空' return render(request, self.TEMPLATE, data) Message.objects.filter(id=id).update(content = message) return redirect(reverse('fourpagetwo'))
分类:
django
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2017-01-19 elasticsearch5.0.1安装 marvel 插件