一陶夜、刪除功能
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')
# 查詢需要?jiǎng)h除的文章,并調(diào)用delete()進(jìn)行刪除
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 表示必填項(xiàng)
# min_length 表示最小長(zhǎng)度
title = forms.CharField(min_length=5, required=True,
error_messages={
'required': '文章標(biāo)題是必填項(xiàng)',
'min_length': '文章標(biāo)題不能少于5個(gè)字符',
})
desc = forms.CharField(min_length=20, required=True,
error_messages={
'required': '文章描述必須填寫',
'min_length': '文章描述不能少于20字符',
})
content = forms.CharField(required=True,
error_messages={
'required': '文章內(nèi)容必須填寫',
})
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':
# 獲取編輯文章對(duì)象
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中配置如下參數(shù)
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:渲染標(biāo)簽的樣式
{{ content_h2 | safe }}
2.upper:將所有的單詞都大寫
{{ name | upper }}
3.lower:將所有的單詞都小寫
{{ name | lower }}
4.capfirst:將所有的單詞首字母大寫
{{ name | capfirst }}
5.first:獲取python變量中的第一個(gè)字符
{{ name | first }}
6.last:獲取python變量中的最后一個(gè)字符
{{ name | last }}
四、日志文件
1.日志logging模塊
logging模塊可以收集記錄錯(cuò)誤宏胯,警告等調(diào)試信息羽嫡,在程序中可以捕獲這些信息,甚至可以將錯(cuò)誤的重要信息等通過郵件發(fā)送給開發(fā)者肩袍。
2.logging的組成
Loggers:日志系統(tǒng)的入口杭棵,可以向它寫入需要處理的消息
Handlers:Handler決定如何處理logger中的每條消息,它表示一個(gè)特定的日志行為
Formatters:日志記錄需要轉(zhuǎn)換成的文本格式
3.在settings.py文件中配置LOGGING日志信息
LOG_PATH = os.path.join(BASE_DIR, 'log')
LOGGING = {
# 必須設(shè)置為1
'version': 1,
# 禁止日志,默認(rèn)值為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上的一個(gè)屬性,表示訪問的時(shí)間
request.init_time = time.time()
def process_response(self, request, response):
# 請(qǐng)求URL耗時(shí)時(shí)間
count_time = time.time() - request.init_time
# 響應(yīng)狀態(tài)碼
code = response.status_code
# 請(qǐng)求地址
path = request.path
# 請(qǐng)求方式
method = request.method
# 響應(yīng)內(nèi)容
content = response.content
# 需要打印的日志信息
log_str = '%s %s %s %s %s' % (path, method, code,
count_time, content)
# 交給logger處理日志
log.info(log_str)
return response