Day 56 Django_BBS(博客项目)_项目总结
项目总结
1、一次请求伴随多次请求
2、PIL 模块
3、session 存储
4、验证码刷新
5、ajax 请求
ajax上传文件的坑,要使用 FormData 进行上传
$('#up_file').change(function () { file_obj = $('#up_file')[0].files[0]; var formdata = new FormData; formdata.append("file",file_obj); formdata.append("csrfmiddlewaretoken",$('[name="csrfmiddlewaretoken"]').val()); $.ajax({ url: '', type: "post", contentType: false, processData: false, data: formdata, success: function (data) { console.log(data) // 展示错误信息 } }); console.log(123) })
6.头像预览
1、获取用户选中的文件对象
2、获取文件对象的路径
3、修改 img 的 src 属性,src = 文件对象的路径
7.存储文件时 django 做的事情
avatar = models.FileField(upload_to='static/app/avatars/', default="/avatars/default.png")
user_obj = UserInfo.objects.create_user(username=user,password=pawd,telephone=telephone,email=email,avatar=tt_img)
django做的事情:
会将文件对象下载到项目的根目录中的 avatars 文件夹中,如果没有 avatar 文件夹,Django 会自动创建,user_obj 的 avatar 存的是文件的相对路径
8.Media配置——MEDIA_ROOT
Django 有两种静态文件:
/static/ js、css、img
/media/ 用户上传文件
配置 MEDIA_ROOT
django做的事情:
会将文件对象下载到MEDIA_ROOT中的 avatars 文件夹中,如果没有 avatar 文件夹,Django 会自动创建,user_obj 的 avatar 存的是文件的相对路径
9.Media配置——MEDIA_url
settings.py:
MEDIA_URL = "/media"
urls.py:
from django.views.static import serve from BBS import settings urlpatterns = [ re_path(r'media/(?P<path>.*)$',serve,{"document_root":settings.MEDIA_ROOT}) ]
10.admin 界面,注册表
admin.py
from django.contrib import admin # Register your models here. from app import models admin.site.register(models.UserInfo) admin.site.register(models.Blog) admin.site.register(models.Category) admin.site.register(models.Tag) admin.site.register(models.Article) admin.site.register(models.Article2Tag) admin.site.register(models.ArticleUpDown) admin.site.register(models.Comment)
11.自定义标签渲染
from django import template register = template.Library() @register.simple_tag def multi(x, y): return x * y @register.inclusion_tag("left_tag.html") def get_home_left_tag(username): pass
12.事务处理
from django.db import transaction with transaction.atomic(): pass
13.发送邮件
settings.py 配置
# 邮箱配置 EMAIL_HOST = 'smtp.163.com' # qq 邮箱 EMAIL_POST = 25 # qq 邮箱端口:465 EMAIL_HOST_USER = 'yishuanggong@163.com' EMAIL_HOST_PASSWORD = 'QMXQCYISYAOIDAXY' # 授权码 DEFAULT_FROM_EMAIL = EMAIL_HOST_USER EMAIL_USE_SSL = False
views.py
from django.core.mail import send_mail from BBS import settings import threading send_mail( '您的文章%s新增一条评论,请查收' % article.title, content, settings.EMAIL_HOST_USER, ["%s" % article.user.email] # 邮箱地址 ) # 线程发送 t = threading.Thread(target=send_mail, args=( '您的文章%s新增一条评论,请查收' % article.title, content, settings.EMAIL_HOST_USER, ["%s" % article.user.email] ) ) t.start()
14.kindeditor 编辑器
下载:http://kindeditor.net/down.php
文档:http://kindeditor.net/doc.php
踩的坑:
1、在 textarea 标签添加 kindeditor 样式后,不能通过 jquery 拿到 textarea 内的 val,需要通过 editor.html() 获取(使用前需要仔细看文档)。
2、Django 默认把 X-Frame-Options 设置为了 deny,在上传文件时报错(in a frame because it set 'X-Frame-Options' to 'deny')
关于的介绍详情可查看:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options
解决:在需要更改 X-Frame-Options 的地方单独引用即可
from django.views.decorators.clickjacking import xframe_options_exempt from django.views.decorators.clickjacking import xframe_options_deny from django.views.decorators.clickjacking import xframe_options_sameorigin @xframe_options_sameorigin def upload(request): pass
15.使用 bs4 模块实现文章描述信息的文字截取
from bs4 import BeautifulSoup def xxx(): content = request.POST.get('content') soup = BeautifulSoup(content,'html.parser') desc = soup.text[:150]