day48-Django删除修改功能、富文本编辑器和日志文件

一、删除功能

1.编辑urls.py配置文件

urlpatterns = [
    # 文章删除
    url(r'^del_art/', views.del_art, name='del_art'),
    url(r'^del_art_id/(\d+)/', views.del_art_id, name='del_art_id'),

2.删除文章功能
方法1:

from django.urls import reverse
from article.models import Article


def del_art(request):
    if request.method == 'GET':
        id = request.GET.get('id')
        # 查询需要删除的文章,并调用delete()进行删除
        Article.objects.filter(pk=id).delete()

        return HttpResponseRedirect(reverse('art:art_list'))

方法2:

from django.urls import reverse
from article.models import Article


def del_art_id(request, id):
    if request.method == 'GET':
        # 查询文章并删除
        Article.objects.filter(pk=id).delete()

        return HttpResponseRedirect(reverse('art:art_list'))

二、修改功能

1.编辑urls.py配置文件

urlpatterns = [
    # 文章编辑
    url(r'^edit_art/(\d+)/', views.edit_art, name='edit_art'),
]

2.新建form表单

from django import forms


class EditArtForm(forms.Form):
    # required = True 表示必填项
    # min_length 表示最小长度
    title = forms.CharField(min_length=5, required=True,
                            error_messages={
                                'required': '文章标题是必填项',
                                'min_length': '文章标题不能少于5个字符',
                            })
    desc = forms.CharField(min_length=20, required=True,
                           error_messages={
                               'required': '文章描述必须填写',
                               'min_length': '文章描述不能少于20字符',
                           })
    content = forms.CharField(required=True,
                              error_messages={
                                  'required': '文章内容必须填写',
                              })
    icon = forms.ImageField(required=False)

3.修改文章功能

from article.Artform import EditArtForm
from article.models import Article


def edit_art(request, id):
    if request.method == 'GET':
        # 获取编辑文章对象
        article = Article.objects.filter(pk=id).first()
        return render(request, 'add_article.html', {'article': article})

    if request.method == 'POST':
        form = EditArtForm(request.POST, request.FILES)
        if form.is_valid():
            title = form.cleaned_data['title']
            desc = form.cleaned_data['desc']
            content = form.cleaned_data['content']
            icon = form.cleaned_data['icon']
            article = Article.objects.filter(pk=id).first()
            article.title =title
            article.desc = desc
            article.content = content
            if icon:
                article.icon = icon
            article.save()
            return HttpResponseRedirect(reverse('art:art_list'))
        else:
            article = Article.objects.filter(pk=id).first()
            return render(request, 'add_article.html', {'form': form, 'article': article})

三、富文本编辑器

1.在settings.py中配置如下参数

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

2.页面中加载富文本编辑器

{% block js %}
    {% load static %}
    <script src="{% static 'kindeditor/kindeditor-all.js' %}" type="text/javascript"></script>
    <script src="{% static 'kindeditor/lang/zh-CN.js' %}" type="text/javascript"></script>
    <script type="text/javascript">
     KindEditor.ready(function(K) {
            window.editor = K.create('#editor_id',{
                uploadJson:'/util/upload/kindeditor'
            });
        });
    </script>
{% endblock %}

3.Django过滤器

1.safe:渲染标签的样式
    {{ content_h2 | safe }}

2.upper:将所有的单词都大写
    {{ name | upper }}

3.lower:将所有的单词都小写
    {{ name | lower }}
    
4.capfirst:将所有的单词首字母大写
    {{ name | capfirst }}

5.first:获取python变量中的第一个字符 
    {{ name | first }}

6.last:获取python变量中的最后一个字符
    {{ name | last }}

四、日志文件

1.日志logging模块
logging模块可以收集记录错误,警告等调试信息,在程序中可以捕获这些信息,甚至可以将错误的重要信息等通过邮件发送给开发者。
2.logging的组成

Loggers:日志系统的入口,可以向它写入需要处理的消息

Handlers:Handler决定如何处理logger中的每条消息,它表示一个特定的日志行为

Formatters:日志记录需要转换成的文本格式

3.在settings.py文件中配置LOGGING日志信息

LOG_PATH = os.path.join(BASE_DIR, 'log')

LOGGING = {
    # 必须设置为1
    'version': 1,
    # 禁止日志,默认值为True
    'disable_existing_loggers': False,
    # 格式化
    'formatters': {
        'default': {
            'format': '%(message)s'
        }
    },
    # logger接收日志
    'loggers': {
        '': {
            'handlers': ['console'],
            'level': 'INFO',
        }
    },
    # handlers处理日志
    'handlers': {
        'console': {
            'level': 'INFO',
            'filename': '%s/day08log.log' % LOG_PATH,
            'formatter': 'default',
            'class': 'logging.handlers.RotatingFileHandler',
            'maxBytes': 5 * 1024 * 1024
        }
    }
}

4.定义日志处理中间件

import time
import logging

from django.utils.deprecation import MiddlewareMixin


# 获取logger
log = logging.getLogger(__name__)


class LogMiddleware(MiddlewareMixin):
    def process_request(self, request):
        # 绑定在request上的一个属性,表示访问的时间
        request.init_time = time.time()

    def process_response(self, request, response):
        # 请求URL耗时时间
        count_time = time.time() - request.init_time
        # 响应状态码
        code = response.status_code
        # 请求地址
        path = request.path
        # 请求方式
        method = request.method
        # 响应内容
        content = response.content
        # 需要打印的日志信息
        log_str = '%s %s %s %s %s' % (path, method, code,
                                      count_time, content)
        # 交给logger处理日志
        log.info(log_str)
        return response

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容

  • From:Python之日志处理(logging模块) - 云游道士 - 博客园 https://www.cnbl...
    vigny的先生阅读 2,686评论 3 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,672评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,827评论 6 342
  • 切换到创建项目的目录 cd C:\Users\admin\Desktop\DjangoProject创建名为pr...
    在努力中阅读 3,275评论 2 3
  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 2,074评论 0 8