内容回顾:

多对多

class Pulisher(models.Model):
name = models.CharField(max_length=32)

class Book(models.Model):
name = models.CharField(max_length=32)
pub = models.ForeignKey('Pulisher',on_delete=models.DO_NOTHING)

class Author(models.Model):
name = models.CharField(max_length=32)
books= models.ManyToManyField(to='Book')
# 查询
book_obj.pub # 所关联的对象 book_obj.pub_id 所关联的对象的id

author_obj.books # 关系管理对象
author_obj.books.all() # 所关联的所有的书籍对象
# 新增
Book.objects.create(name='xxx',pub=对象)
Book.objects.create(name='xxx',pub_id=对象的ID)

obj= Book(name='xxx',pub_id=对象的ID)
obj.save()

obj = Author.objects.create(name='xxx')
obj.books.set([书籍id,书籍id])
# 删除
Book.objects.filter(pk=pk).delete() # QuerySet 删除
Author.objects.get(pk=pk).delete() # 对象 删除
# 编辑
Book.objects.filter(pk=pk).update(name='xxx')

book_obj.name ='xxxx'
book_obj.save()

Author.objects.filter(pk=pk).update(name='xxx')
author_obj.books.set([id,id])

cookie

定义:

保存在浏览器上的一组组键值对

为什么要有cookie?

http协议是无状态,每次请求都是相互独立,没有办法保存状态.用cookie保存状态.

cookie的特点:

  1. 由服务器让浏览器进行设置的

  2. 浏览器保存在本地的

  3. 下次访问时自动携带对应的cookie

Django中操作cookie的方法:

  1. 设置

    响应头: set-cookie : key=value

    response.set_cookie(key,value,max_age=5,path='/')
    response.set_signed_cookie(key,value,salt='xxxx',max_age=5,path='/')
  2. 获取

    请求头: cookie

    request.COOKIES # {}
    request.COOKIES.get(key)

    request.get_signed_cookie(key,salt='xxxx',default='')
  3. 删除

    response.delete_cookie(key) 

装饰器:

from functools import wraps

def wrapper(func):
@wraps(func) # 复制了原来函数的名字和注释
def inner(request,*arg,**kwargs):
# 之前
ret = func(request,*arg,**kwargs)
# 之后
return ret
return inner

@wrapper # f1 = wrapper(f1)
def f1(request):
pass

f1.__name__ # inner _> f1

response:

from django.shortcuts import render, redirect, HttpResponse
HttpResponse()
render()
redirect()

session

定义:保存在服务器上的一组组键值对,必须依赖cookie

为什么要有session?

  1. cookie保存在浏览器上,不太安全

  2. cookie的大小和个数有限制

Django中操作session

设置:

request.session[key] = value 

获取

request.session[key]
request.session.get(key)

删除:

request.session.pop('is_login')
request.session.delete() # 删除所有的session数据
request.session.flush() # 删除所有的session数据和cookie

其他:

request.session.clear_expired()
request.session.set_expiry(value)

配置:

from django.conf import global_settings

SESSION_COOKIE_NAME = 'session' # cookie的名字
SESSION_SAVE_EVERY_REQUEST = True # 每次请求都更新session
SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 浏览器关闭session就失效

SESSION_ENGINE = 'django.contrib.sessions.backends.db'
from django.contrib.sessions.backends import db
# 数据库 缓存 缓存+数据库 文件 加密cookie

正则表达式

^ $ [0-9] [a-zA-Z] [asd]{4,6} +(一个或多个) *(0个或多个) ? (0个或1个)

\d \w .(除了换行符之外的任意字符)

分组:

url(r'^del_publisher/(\d+)/', views.del_publisher),

分组后从url中捕获参数,捕获的参数会按照 位置传参 传递给函数

命名分组

url(r'^del_publisher/(?P<pk>\d+)/', views.del_publisher),

分组后从url中捕获参数,捕获的参数会按照 关键字传参 传递给函数

url的命名和反向解析

命名:

url(r'^login/', views.login,name='login'),

反向解析:

模板:

{% url 'login' %}  -> "/app01/login/"  # 反向解析生成一个可以访问的地址

py文件:

from django.urls import  reverse
reverse('login') ——》 "/app01/login/" # 反向解析生成一个可以访问的地址

分组

url(r'^blog/([0-9]{4})/(\d{2})/$', views.blog,name='blog'),

模板:

{% url 'blog' 2020 10  %}  ——》 ‘/app01/blog/2020/10/’

py文件:

reverse('blog',args=['2019','10']  ——》 ‘/app01/blog/2020/10/’

命令分组

url(r'^blog/(?P<year>[0-9]{4})/(?P<month>\d{2})/$', views.blog,name='blog'),

模板:

{% url 'blog' 2020 10  %}  ——》 ‘/app01/blog/2020/10/’
{% url 'blog' month=10 year=2019 %} ——》 ‘/app01/blog/2020/10/’

py文件:

reverse('blog',args=['2019','10']  ——》 ‘/app01/blog/2020/10/’
reverse('blog',kwargs={'year':'2019','month':'10'}) ——》 ‘/app01/blog/2020/10/’

namespace:

url(r'^app01/', include('app01.urls',namespace='app01')),
url(r'^app02/', include('app02.urls',namespace='app02')),
{%  url 'namespace:name'  %}
reverse('namespace:name')
优质内容筛选与推荐>>
1、[luogu2765 网络流24题] 魔术球问题 (dinic最大流)
2、Android 获取 json
3、vb timer控件
4、对称加密算法学习(1)
5、购物车小程序


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号