美文网首页
Python Web框架 Django - 带参数路由、富文本编

Python Web框架 Django - 带参数路由、富文本编

作者: 莫名ypc | 来源:发表于2018-12-05 17:57 被阅读0次

带参数的路由

reverse 接收 url 中的 name 作为第一个参数,我们在代码中就可以通过 reverse() 来获取对应的网址(这个网址可以用来跳转,也可以用来计算相关页面的地址),只要对应的 url 的name不改,就不用改代码中的网址。

在网页模板中也是一样,可以很方便的使用。

不带参数的:
{% url 'name' %}
带参数的:参数可以是变量名
{% url 'name' 参数 %}

例如:

<a href="{% url 'add2' 4 5 %}">link</a>

自己来写一个跳转方法:

def old_add2_redirect(request, a, b):
    return HttpResponseRedirect(
        reverse('add2', args=(a, b))
    )

urls.py中:

    url(r'^add/(\d+)/(\d+)/$', calc_views.old_add2_redirect),
    url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),

固定位置传参

urls.py

url(r'^args/(\d+)/(\d+)/(\d+)/', views.args),

views.py

def args(request, year, month, day):
    if request.method == 'GET':
        s = '%s年%s月%s日' % (year, month, day)
        return HttpResponse(s)

关键字传参

urls.py

    url(r'^kargs/(?P<yaer>\d+)/(?P<month>\d+)/(?P<day>\d+)/', views.kargs),

views.py

def kargs(request, day, month, year):
    if request.method == 'GET':
        s = '%s年%s月%s日' % (year, month, day)
        return HttpResponse(s)

富文本编辑器

1.引入kindeditor富文本编辑器,放在static文件夹下
配置settings.py 文件

STATIC_URL = '/static/'
# 配置static的路径
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

MEDIA_URL = '/media/'
# 配置media的路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  1. 页面中加载富文本编辑器,引入js,实例化富文本输入框
{% extends 'base.html' %}

{% block title %}
    文章编辑页面
{% endblock %}

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

{% block content %}
    <form action="" method="post">
        {% csrf_token %}
        {{ msg }}
        标题:<input type="text" name="title">
        内容:<textarea id="editor_id" name="content"></textarea>
        <p><input type="submit" value="提交"></p>
    </form>
{% endblock %}

过滤器

safe 渲染标签样式

{% block content %}
    {{ content_h2 | safe }}<br>
{#    标题化 #}
    {% for name in names %}
        {{ name | title }}
    {% endfor %}
    <br>
{# 首字母大写 #}
    {% for name in names %}
        {{ name | capfirst }}
    {% endfor %}
    <br>
{#    计算长度 #}
    {% for name in names %}
        {{ name | length }}
        {{ name | first}}
        {{ name | last }}
    {% endfor %}

{% endblock %}

日志

日志logging模块

组成

Loggers
Handlers
Filters
Formatters

loggers:

Python 定义以下几种日志级别:

DEBUG:用于调试目的的底层系统信息
INFO:普通的系统信息
WARNING:表示出现一个较小的问题。
ERROR:表示出现一个较大的问题。
CRITICAL:表示出现一个致命的问题。

日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET

handler:

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

Filters

Filter 用于对从logger 传递给handler 的日志记录进行额外的控制。

Formatters

Formatter 表示文本的格式。Fomatter 通常由包含日志记录属性的Python 格式字符串组成

formatter格式:


django_logging_model.png

配置日志

配置settings文件

1.文件夹地址

# 日志文件夹的路径
LOG_PATH = os.path.join(BASE_DIR, 'logs')
# 如果日志文件夹地址不存在,则自动创建
if not LOG_PATH:
    os.mkdir(LOG_PATH)

2. 定义LOGGING中的信息,比如loggers,formatters,handlers等

# 配置日志
LOGGING = {
    # 必须设置为1
    'version': 1,
    # 禁止日志
    '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,
        }
    }

}

使用logging打印日志

1.在程序中可以使用logging获取日志对象,然后进行日志打印

 import logging

 # 获取logger,logger用于接收日志信息,并且丢给handlers进行处理
 logger = logging.getLogger(__name__)

 # logger接收日志信息的几个方法,如下:
 logger.debug()
 logger.info()
 logger.warning()
 logger.error()
 logger.critical()

2.定义日志处理的中间件,进行日志的打印处理

定义日志中间件logMiddleware.py文件,定义LoggingMiddleware类,该类继承MiddlewareMixin,并重构process_request和proccess_response方法:

import time
import logging

from django.utils.deprecation import MiddlewareMixin

# 获取log
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

相关文章

网友评论

      本文标题:Python Web框架 Django - 带参数路由、富文本编

      本文链接:https://www.haomeiwen.com/subject/jwdicqtx.html