1、session 用base64解码 不是永久的
django清除session从django.contrib.auth import logout
logout(request)
request.session.clear()
request.session.flush()
2、设置过期时间:
set_expiry(value) 不设置2个星期,, 10 为10秒之后过期 可以写整数、时间的对象、0(关闭浏览器是过期)、None(永不过期)
3、django定义模板:
变量 {{ 变量 }} 传递给模板的数据
标签 {% tag %} 1输出中创建文本 2控制逻辑和循环 分类 if for conment ifequal include url csrf_token block/extends autoescape
过滤器 {{ var|过滤器}} 作用,在变量在显示前修改 不修改本身 lower upper 过滤器可以传递参数,参数用引号引起来,join(拼接字符串) test|default:"没有" date
根据指定格式转换日期为字符串 date {{}dateVal|dateL:"y-m-d"}
4、html 转义 escape
加减乘除:
5、注释 单行注释: {#content #} 多行注释:{comment}
6、include 加载模板并且以标签内的参数渲染
7、django反向解析:
模板继承:减少页面的重复利用,减少重复代码 移动端用到继承头和尾!
8、djangoHTML转义: {{ code|safe}} 或者 {% autoescape off%} {% endautoescape %}
9、csrf: 跨站请求伪造,恶意网站包含链接、表单、按钮、 利用登录的用户在浏览器中认证,从而攻击服务,意思是从浏览器把首页给拿出来,然后复制到自己的代码中,再把请求完整的路径给复制到action中模拟请求,就是为了防止跨站请求
'django.middleware.csrf.CsrfViewMiddleware', 把自己给防了
{% csrf_token %} 这个如果找到了也不行,没有绝对的安全
10、django验证码:注册登录时防止暴力请求,减轻服务器的压力,防止csrf的一种方式
11、破解代码:
def veryfycode(request):
from PIL import Image, ImageDraw, ImageFont
import random
bgcolor = (random.randrange(20, 100), random.randrange(20, 100), random.randrange(20, 100))
width = 100
height = 50
im = Image.new("RGB", (width, height), bgcolor)
draw = ImageDraw.Draw(im)
for i in range(0, 100):
xy = (random.randrange(0, width), random.randrange(0, height))
fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
draw.point(xy, fill=fill)
str = "1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"
rand_str = ""
for i in range(0, 4):
rand_str += str[random.randrange(0, len(str))]
fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
draw.text((5, 2), rand_str[0], fill=fontcolor)
draw.text((25, 2), rand_str[1], fill=fontcolor)
draw.text((50, 2), rand_str[2], fill=fontcolor)
draw.text((75, 2), rand_str[3], fill=fontcolor)
del draw
request.session["verifycode"] = rand_str
import io
buf = io.BytesIO()
im.save(buf, "png")
return HttpResponse(buf.getvalue(), "image/png")
12、django静态文件:css 要配置settings文件!
可以是图像路径:
STATIC_URL = '/static/'
文件目录:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
13、django中间件:轻量级。底层插件,可以介入django的请求和相应, 本质是一个python类, 有6个方法 包括__Init__
14、上传图片:必须是post请求!
存在服务器上,自己上传上去的,,,文件上传的时候,文件存储在request.files的属性中,存到服务器的目录静态文件中,在static下创建upfile`目录用来存储上传上来的图像
配置settings文件: MDEIA_ROOT=os.path.join(BASE_DIR, r"static/upfile")
表单需要加一个属性:enctype="multipart/form-data"
def savefile(request):
if request.method == "POST":
15、f 为文件描述符
f = request.FILES.get("file")
把传过来的文件存到下面的目录中!文件在服务器端的路径
filePath = os.path.join(settings.MDEIA_ROOT, f.name)
在把文件读出来然后在写到对应的目录下!
with open(filePath, "wb") as fp:
for info in f.chunks():
fp.write(info)
return HttpResponse("上传成功")
else:
return HttpResponse("上传失败")
16、django分页展示:
paginator(列表, 整数每页几个)对象 创建对象 属性 方法 异常 返回一个分页对象
属性:count num_pages(页码总数) page_range(页码列表,从1开始)
invalidpage 抛出异常没有此页数
pagenotinterger 不是整数时
emptypage 传递页数是正确的,但是没有数据
paginator对象.page 获取page对象
page(num) 对象 获取一个page对象,如果页码不存在,抛出异常invalidpage
属性: object_list 当前页上的所有数据的列表
number 当前页的页码值
paginator 当前page对象关联的paginator对象
paginator方法:
has_next :有返回true
has_previous:
has_other_pages:
next_page_number: 返回下一页的页码
previous_page_number: 返回上一页的页码
len :返回当前页的数据对象个数
17、django的ajax:
需要动态生成,请求json数据 点击页面上的按钮请求学生的json数据
18、django富文本: 主要用于写博客时使用
1 在站点中使用:配置settings文件 在installed_apps添加 tinymce
2 创建模型类
3 配置站点
在自定义的视图中使用:
富文本的配置文件 模式和大小
TINYMCE_DEFAULT_CONFIG = {
"them":"advanced",
"width":600,
"height":400,
}
在自定义视图中使用的最多:在页面中使用
19、django中的celery:
网站每隔一段时间会同步一下数据:但是http请求是需要触发的 -----使用celery定时执行
用户请求,等待response: -------任务放到celery中执行
celery名词:
任务task:本质是一个函数,将耗时操作封装成一个函数
队列queue:将要执行的任务放到队列中
工人worker:负责执行队列中的任务
代理broker:负责调度,在部署环境中,一般使用redis
pip install celery
pip install celery-with-redis
pip install django-celery
配置settings:
installed_app djcelery
import djcelery
djcelery.setup_loader() 初始化队列
BROKER_URL = "redis://:sunck@127.0.0.1:6379/0"
CELERY_IMPORTS = ("app.task"
在应用目录下创建task.py文件
迁移,生成celery需要的数据库表
在工程目录下的__init__文件中添加 from .celery
celery 启动命令:
python manage.py celery -A helloworld worker -l info
20、迁移命令:
python manage.py makemigrations 基于当前的model创建新的迁移策略文件
python manage.py migrate 用于执行迁移动作,具有syncdb的功能