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过滤