12月1日学习内容整理:模版语言中的继承和母板,cookie


一、模版语言中的母板和继承

1、应用场景:这一周写的学员管理系统都是各自独立的页面渲染,实际情况显然不是这样的,所以有以下问题需要解决:

(1)如何实现将所有页面的公共部分保存起来,我们点击菜单中的不同选项跳转到不同页面,但公共的部分首宗没有变

要想解决这个问题,就要用到母板和继承了

2、在母板中进行占位

{% block 名字 %} 这个名字就代表占位的符号

{% endblock %}

{% block xxx-css %} 通常写入这样的形式来表示子页面中需要额外引入的CSS文件

{% endblock %}

{% block xxx-js %} 通常写入这样的形式来表示子页面中需要额外引入的JS文件

{% endblock %}

3、子页面中如何继承

(1)在页面的最上方写入:{% extends "母板文件名" %} 这就是继承母板中所有的内容

(2) 子页面中如何添加和母板不同的部分:利用母板中的block占位去写自己区别于母板的部分,包括引入自己的CSS和JS文件

{% block 母板中的名字 %}

实际的内容

{% endblock %}

4、引用

{% include "文件名" %} 这就是引用了指定文件名的内容,比如说有好几个页面都是相同的导航条,其它部分全都不一样,这时候用继承就没有必要了,直接引用就可以了

二、cookie

1、定义:

》》》是保存在浏览器端的一个个键值对

》》》服务端可以通过响应向浏览器写cookie数据(响应头会有set-cookie字段)

》》》浏览器每次发请求时会携带cookie数据

2、应用场景:

(1)这周我们写的学员管理系统每次URL请求时都对应不同的函数,但是实际中这些操作应该是要登录以后才能做,并且不登陆输入对应的URL也不能执行对应的函数

(2)每次执行对应的操作的时候也要首先判断登录状态

上面两个问题都可以用cookie来解决

3、如何实现

(1)创建cookie:因为是服务端给客户端写cookie,所以是响应携带的数据,这里的response就指代服务端给客户端的响应,Django给响应提供了创建cookie的方法

》》》不带盐的cookie

response.set_cookie()

参数:

key, 设置键,按位置传,字符串形式

value='', 设置key对应的值,默认是空字符串

max_age=None, 超时时间,代表经过多少秒后cookie的key值就会失效,注意这里并不是指多少秒没有操作就会失效而是多少秒后就会失效

expires=None, 也是超时时间,但是是指定时间,比如说指定几月几号的几时几分几秒sookie失效

path='/', 指的是URL,/代表根

不要求掌握::

domain=None, 域名

secure=False, 安全相关,加密用的

httponly=False JS代码不能读取cookie,只能浏览器发请求时携带cookie

》》》带盐的cookie

response.set_signed_cookie()

参数:

key,

value,

salt="自己设置的盐"

**kwargs

》》》》注意注意注意:::::

value值默认是字符串形式,所以我们在判断时必须要加引号

value值也可以是字典或列表等类型,但是存储的仍然是字符串类型,若想要存储字典等类型并且获取value值也可以得到字典等类型,就必须用json序列化和反序列化

不能设置多个key

(2)取出cookie:cookie可以创建多个key和value

》》》不带盐的cookie

request.COOKIES 拿到所有的cookie数据

request.COOKIES.get(key) 这样就可以取到我们设置的value值,注意一点不带盐的cookie值若没有的话默认为空字符串(None)

》》》带盐的cookie

request.get_signed_cookie(key,salt=自己设置的盐,default=xxxx) 这样就可以取到我们自己设置的带盐的value值

注意一点,带盐的cookievalue没有默认值,所以我们在取的时候必须设置一个默认值,否则的话是会报错的

(3)删除cookie值

response.delete_cookie(key)删除指定的key值

补充:另一种需求:我们写的管理系统必须要登陆成功以后才能进行额外的操作,那比如用户在输入网址时提示他要登陆,登录成功后按照我们的写法就直接跳到首页了,那其实应该跳到用户之前输入的网址上,这里就要用到request的一个方法

request.get_full_path() 这里就拿到了用户输入的网址,即请求中的URL,我们可以在登录时使用get请求把用户之前输入的网址和nexturl这个字段拼接到URL中,这样我们后端利用nexturl这个字段取数据后就可以直接跳转到用户输入的网址了

》》》》》注意:::这个方法在后端和前端都可以用,在前端当作占位符使用{{request.get_full_path}},也是拿到请求中的URL

补充:装饰器修复

from functools import wraps

在装饰器内部协商@wraps(func)就可以保留原函数的一些自身属性和注释,因为一执行装饰器,原函数名

from functools import wraps

def wrapper(func):
    @wraps(func)  # 修复一下被装饰函数的信息
    def inner(*args, **kwargs):
        print("叫地主")
        func()
    return inner

@wrapper
def f1():
    """
    来自星星的你
    :return:
    """
    return "f1"

ret = f1.__doc__
print(ret)

实际上就变成了inner

优质内容筛选与推荐>>
1、1-PLSQL developer 连接不上64位Oracle 的解决方法(大招版vs细节版)
2、1.目录及文件的命令
3、安装mysql8.0.17指南
4、2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest
5、svn checkout 提示“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。”解决方法


长按二维码向我转账

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

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

    已发送

    朋友将在看一看看到

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

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号