zoukankan      html  css  js  c++  java
  • 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'))
  • 相关阅读:
    Atitit ..Net Framework sdk 3.0 3.5 4.04.5 4.6 4.7  .net core版本新特性 v2 s22 1. 新特性来源于 down ms 官方网站 1
    Atitit 工业体系的分类 目录 1. 有多少个灰色 黑色行业?? 1 2. 30个制造业行业细分 制造业下面还有更精细的划分,见下表1.2: 2 3. 艾提拉需要掌握的体系 3 4. 艾提拉需要
    Atitit 提升开发效率 通道化驱动化数据操作与查询 目录 1. xiaoguo 1 1.1. Atitit mybatis 简化开发与提升开发效率法 1 2. Code 1 3. ref 4
    Atitit 常见聚合运算与算法 目录 1.1. 单行函数,vs 那就是聚合函数 1 1.2. 聚合分类 哈希聚合 标量聚合 流聚合 1 1.3. 常见聚合函数 mysql oracle等 1 r
    Atitit git 使用法v2 目录 1. Git客户端工具 1 1.1. Tortoisegit git gui 图形化工具。。 1 1.2. Ide中的git插件(eclipse idea
    Atitit 提升开发效率的方法 提升语言级别 目录 1. 提升语言级别到4gl 1 1.1. 语言的代际关系 sql 》script 》java 1 1.2. 使用4gl dsl语言与api 1
    Atitit mybatis返回多个数据集总结 目录 1.1. 配置handleResult接受,但是只有第一个select语句的结果 1 2. 配置resultMap ok 1 2.1. 调
    Atitit pdf转文本 pdf2txt v4 t83.docx Atitit pdf转文本 pdfutil 目录 1.1. Pdfbox cmd 模式 TextToPDF 1 1.2. Pdf
    Atitit mybatis 简化开发与提升开发效率法 目录 1.1. 使用注解模式代替xml模式 1 1.2. 使用通用mapper代替专用mapper 1 1.3. 使用js等脚本语言来输出sq
    Atitit mq的AMQP 协议 STOMP2 、MQTT3 等协议  MQTT,XMPP,STOMP,AMQP,WAMP 目录 1. AMQP in a Nutshell 1 2. MQTT概述
  • 原文地址:https://www.cnblogs.com/reblue520/p/14299701.html
Copyright © 2011-2022 走看看