BBS项目详解(forms快速创建登陆页面,登陆验证、通过阅读器进行头像上传的预览、内存管理器)

BBS项目涉及的知识点

django中知识点

钩子函数(局部钩子和全局钩子)

1、局部钩子就是用来做合法性校验,比如用户名有没有被使用等

2、全局的就是用来做对比校验,比如两次输入的密码是否一致

3、钩子函数必须主动弹出一个错误信息,要弹出错误信息就要用到raise函数,然后使用ValidationError()模块,括号里传入错误信息,要使用ValidationError()模块就要导入这个模块 from django.core.exceptions import ValidationError

4、局部钩子函数(固定写法) : 定义方式 def clean_字段名(self),self就是当前forms对象,name = self.cleaned_data.get('name')  # cleand_data就是清洗后的数据,get就是去除数据的方法,传入的参数就是要从字典中取出的字段

5、全局钩子函数(固定写法):定义方式def clean(self),后面和局部钩子的定义一样

6、error = forms.errors.get('__all__')[0]   # 这里获取全局钩子函数的错误信息,就要用__all__,然后全局的错误信息可能是多个的,所以取最近的一个就是索引位是0的位置

7、路由的设计

8、富文本编辑器

9、截取摘要的时候只截取文字,去除代码,处理XSS攻击,from bs4 import BeautifulSoup # 处理XSS攻击的模块

forms函数快速创建注册页面、字段内的属性、清洗数据、解压赋值

1、要使用forms组件必须先导入 : from django import forms

2、label 就是设置程序在快速创建注册页面的时候输入框的提示文字

3、error_message 就是错误信息的提示,后面用字典形式传入,比如前面设置了最大的长度max_length=8,则字典里传'max_length': '用户名太长了',程序会自动匹配规则,如果是超过最大长度,就会返回这个最大长度的错误信息

PS:错误信息里的 required参数默认就有,如果不设定则默认是英文的字符

4、widget=widgets.TextInput(attrs={'class': 'form-control'})  widget 就是定义前端输入框的类型,后面的引用的参数是指定输入框的格式,TextInput是一个类,传入的参数attrs是一个字典,可以利用这个参数给前端的标签取类名或者id名等等来实现引用bootstrap的样式

5、调用forms组件,先实例化一个forms对象 forms = RegForms(request.POST)

6、cleand_data(‘shuju’)  就是清洗后的数据

html页面文件的知识点

1、使用forms快速生成控件,就是输入框

2、标签里的{{ form.auto_id }} 就是当点击控件的提示字符则会自动选中这个控件,定位到输入框

3、选择头像功能

4、借助文件阅读器将图片显示到页面上

5、ajax上传文件需要借助formdata对象

6、获取页面输入框内容的方法

7、juqery的for循环方法each

8、当页面再次接受数据的时候删除错误信息和效果(比如控件错误会提示错误信息和输入框变红,当我们再次选中时候就清除这些样式)

9、页面中获取全局钩子的错误信息

10、使用固定的ID名来将错误的信息在指定的输入框下局部刷新出来,然后使用链式操作加入一个jq的样式类名,让输入框错误时候变红提示

11、页面定时器触发效果

12、js获取当前时间

13、js给标签的某一个属性重新赋值

14、标签的属性值的拼接

15、JS中location对象的用法以及属性href

16、使用 from django.views.static import serve  #使用这个模块来添加头像显示的地址路由,让页面能够获取头像图片

17、个人站点的样式使用 

18、模板的继承

19、获取当前控件、修改控件的字符串

20、forloop创建楼层数

21、js中es6的语法实现根评论 

生成随机验证码

1、内存管理器  from io import BytesIO  # BytesIO这个是内存管理器,很多数据只要生成一次就不会再需要,所以要使用内存管理器,用处就是把bytes格式的数据存到内存中,使用后就清除

2、python中的图像处理模块  from PIL import Image,ImageFont,ImageDraw  # 这个就是导入pillow模块下的功能,image就是图片生成功能,ImageDraw就是生成图片上的线,ImageFont就是生成字体文件的

3、Image.new 生成一张图片,img = Image.new('RGB',(300,35),get_color())  有三个参数,分别是 mode颜色模式、size图片大小(必须先传width,再传height)、color就是图片的颜色可以传一个元组,就是rgb颜色的数值

4、ImageFont就是生成字体文件  font = ImageFont.truetype(font='static/font/hbyy.ttf',size=25)  #  font=传一个ttf格式的文件,size就是字体大小

5、mageDraw模块在图片上生成文字,需要生成一个对象,对象里面有text就是生成文字,line就是生成线,arc就是弧形,point就是画点

6、draw = ImageDraw.Draw(img)  #  两个参数,img就是图片对象,第二参数不传也可以

7、内存管理器的使用 f = BytesIO() 这个f是一个变量名,就是创建了内存上的空间,img.save(f,'png') 将生成的图片以bytes格式写到内存空间中,data = f.getvalue() 将内存空间中的图片放入变量中然后可以返回至前端的页面

用到的模块

from django.shortcuts import render, HttpResponse,redirect  #新手三件套
from bbs01.myforms import RegForms # 导入forms组件
from bbs01 import models #这个是调用 表需要导入的模块
from django.http import JsonResponse #这个是向页面返回js格式的数据
from django.contrib import auth # 导入auth模块
from django.contrib.auth import login,logout # django自带的登陆和登出功能模块
from django.db.models import Avg,Max,Sum,Min,Max,Count #django中使用聚合函数
from django.db.models.functions import TruncMonth # 把日期按照规则截断,需要调用 django.db.models.functions 下的模块
from bs4 import BeautifulSoup  # 处理XSS攻击的模块
from django.contrib.auth.models import AbstractUser  # 调用auth模块需要导入的模块
 

伪静态

静态地址就是在地址后面有一个html的后缀,当百度爬虫的时候的会收录进数据库,然后收录的权限会比较高,因为静态的地址是不会变的

如何变成伪静态:url(r'^login.html', views.login_in) 在路由里后面添加.html即可,就是为了厂商的seo优化需要伪静态

报错信息

ValueError: Database returned an invalid datetime value. Are time zone definitions for your database installed?  #这个是时区问题,因为django是老外写的

PS:django存的数据时间是和我们当前时间差8个小时,因为是UTC时区,显示在页面上正常是因为django在前后交互的过程中自动转换了,所以要在settings文件里面 修改TIME_ZONE = 'UTC' 为‘Asia/Shanghai’     USE_TZ=False

如果在查询数据的时候有点问题,可以试试fliter过滤

原文地址:https://www.cnblogs.com/shizhengquan/p/10601561.html