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]
原文地址:https://www.cnblogs.com/ysging/p/12815418.html