第二十一章 Django的分页与cookie

第一课 模板

1.模板的继承

在Template目录下新建模板master.html

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>{% block title %}{% endblock %}</title>

<link rel="stylesheet" href="/static/commons.css">

<style>

.pg-header{

height:48px;

background-color: cornflowerblue;

color: red;

}

</style>

{% block css %}{% endblock %}

</head>

<body>

<div class="pg-header">小男孩管理</div>

{% block content %}{% endblock %}

<script src="/static/jquery.js"></script>

{% block js %}{% endblock %}

</body>

</html>

新建tpl1.html

{% extends 'master.html' %}

{% block title %}用户管理{% endblock %}

{% block content %}

<h1>用户管理</h1>

<ul>

{% for i in u %}

<li>{{ i }}</li>

{% endfor %}

</ul>

{% endblock %}

{% block css %}

<style>

body{

background-color: red;

}

</style>

{% endblock %}

2.模板的导入

新建tag.html

<form>

<input type="text" name="" id="1">

<input type="submit" value="sub">

</form>

在tpl1.html中:

{% include 'tag.html' %}

第二课 自定义函数

1.simple_tag:

1.app下创建templatetags目录

2.任意xxoo.py文件

3.from django import template 创建template对象 register=template.Library()

4.@register.simple_tag

def func(arg1,arg2...):

return 'aagagnaads...'

5.settings中注册app

6.html文件顶部{% load xxoo %}

7.{% 函数名 arg1 arg2 %}

缺点:不能作为if条件

优点:参数任意

2.filter:

1.app下创建templatetags目录

2.任意xxoo.py文件

3.from django import template 创建template对象 register=template.Library()

4.@register.simple_tag

def func(arg1,arg2): #参数只能是两个!

return 'aagagnaads...'

5.settings中注册app

6.html文件顶部{% load xxoo %}

7.{{参数1|函数名:参数2}}

缺点:参数限制 引用时不能加空格

优点:能作为if条件

第三课 分页

1.防止xss攻击(默认不执行包含代码的字符串):

1.在前端:{{ page_str|safe}}

2.在后端:

from django.utils.safestring import mark_safe

page_str01 = """..."""

page_str01=mark_safe(page_str01)

2.(使用分页模块)

第四课 cookie和装饰器

cookie是客户端浏览器上的一个文件键值对{'k1':'v1',....}

示例1:

urls.py中添加路径:

path('login/',views.login),

path('index/',views.index),

templates中新建登录页面login.html和主页index.html

login.html代码:

<form action="/login/" method="post">

用户名:<input type="text" name="username">

密码:<input type="password" name="pwd">

<input type="submit" value="提交">

</form>

index.html代码:

<h1>欢迎登陆:{{ k }}</h1>

views.py中代码:

user_info={

'xiaoming':'123',

'xiaohong':'321',

}

def login(req):

if req.method=='GET':

return render(req,'login.html')

if req.method=='POST':

u=req.POST.get('username')

v=req.POST.get('pwd')

if u in user_info:

if user_info[u]==v:

res=redirect('/index/')

res.set_cookie('username111',u,max_age=5)

#5代表5秒钟后清除cookie,不填则关闭浏览器清除cookie

return res

else:

return render(req,'login.html')

def index(req):

v=req.COOKIES.get('username111')

if not v:

return redirect('/login/')

else:

return render(req,'index.html', {'k': v})

cookie加密(浏览器自动给解密了,没毛用):

获取cookie:

req.COOKIES.get('...')

u=req.get_signed_cookie('pwd',salt='abcd')

设置cookie:

req.set_cookie('...')

res.set_signed_cookie('pwd',v,salt='abcd')

装饰器:

def auth(func):

def inner(req,*args,**kwargs):

v=req.COOKIES.get('username111')

if not v:

return redirect('/login/')

return func(req,*args,**kwargs)

return inner

@auth

def index(req):

v = req.COOKIES.get('username111')

return render(req,'index.html', {'k': v})

第二十一章 Django的分页与cookie第一课 模板1.模板的继承在Template目录下新建模板master.html<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>{% block title %}{% endblock %}</title><link rel="stylesheet" href="/static/commons.css"><style>.pg-header{height:48px;background-color: cornflowerblue;color: red;}</style>{% block css %}{% endblock %}</head><body><div class="pg-header">小男孩管理</div>{% block content %}{% endblock %}<script src="/static/jquery.js"></script>{% block js %}{% endblock %}</body></html>新建tpl1.html{% extends 'master.html' %}{% block title %}用户管理{% endblock %}{% block content %}<h1>用户管理</h1><ul>{% for i in u %}<li>{{ i }}</li>{% endfor %}</ul>{% endblock %}{% block css %}<style>body{background-color: red;}</style>{% endblock %}2.模板的导入新建tag.html<form><input type="text" name="" id="1"><input type="submit" value="sub"></form>在tpl1.html中:{% include 'tag.html' %}第二课 自定义函数1.simple_tag:1.app下创建templatetags目录2.任意xxoo.py文件3.from django import template 创建template对象 register=template.Library()4.@register.simple_tag   def func(arg1,arg2...):return 'aagagnaads...'5.settings中注册app6.html文件顶部{% load xxoo %}7.{% 函数名 arg1 arg2 %}缺点:不能作为if条件优点:参数任意2.filter:1.app下创建templatetags目录2.任意xxoo.py文件3.from django import template 创建template对象 register=template.Library()4.@register.simple_tag   def func(arg1,arg2): #参数只能是两个!return 'aagagnaads...'5.settings中注册app6.html文件顶部{% load xxoo %}7.{{参数1|函数名:参数2}}缺点:参数限制 引用时不能加空格优点:能作为if条件第三课 分页1.防止xss攻击(默认不执行包含代码的字符串):1.在前端:{{ page_str|safe}}2.在后端:from django.utils.safestring import mark_safepage_str01 = """..."""page_str01=mark_safe(page_str01)2.(使用分页模块)第四课 cookie和装饰器cookie是客户端浏览器上的一个文件键值对{'k1':'v1',....}示例1:urls.py中添加路径:path('login/',views.login),path('index/',views.index),templates中新建登录页面login.html和主页index.htmllogin.html代码:<form action="/login/" method="post">用户名:<input type="text" name="username">密码:<input type="password" name="pwd"><input type="submit" value="提交"></form>index.html代码:<h1>欢迎登陆:{{ k }}</h1>views.py中代码:user_info={'xiaoming':'123','xiaohong':'321',}def login(req):if req.method=='GET':return render(req,'login.html')if req.method=='POST':u=req.POST.get('username')v=req.POST.get('pwd')
if u in user_info:if user_info[u]==v:res=redirect('/index/')res.set_cookie('username111',u,max_age=5)#5代表5秒钟后清除cookie,不填则关闭浏览器清除cookiereturn reselse:return render(req,'login.html')def index(req):v=req.COOKIES.get('username111')if not v:return redirect('/login/')else:return render(req,'index.html', {'k': v})cookie加密(浏览器自动给解密了,没毛用):获取cookie:req.COOKIES.get('...')u=req.get_signed_cookie('pwd',salt='abcd')设置cookie:req.set_cookie('...')res.set_signed_cookie('pwd',v,salt='abcd')装饰器:def auth(func):def inner(req,*args,**kwargs):v=req.COOKIES.get('username111')if not v:return redirect('/login/')return func(req,*args,**kwargs)return inner@authdef index(req):v = req.COOKIES.get('username111')return render(req,'index.html', {'k': v})

第二十一章 Django的分页与cookie的更多相关文章

  1. JavaScript高级程序设计:第二十一章

    第二十一章 Ajax与Comet 一.XMLHttpRequest对象 1.XHT的用法 在使用XHR对象时,要调用的第一个方法时open( ),它接受3个参数:要发送的请求的类型.请求的URL和表示 ...

  2. Flask 教程 第二十一章:用户通知

    本文翻译自The Flask Mega-Tutorial Part XXI: User Notifications 这是Flask Mega-Tutorial系列的第二十一章,我将添加一个私有消息功能 ...

  3. Gradle 1.12用户指南翻译——第二十一章. Gradle 插件

    昨天晚上只顾着和女朋友看<匆匆那年>电视剧的最后几集,所以说好的Android文档<Gradle 插件用户指南>第五章自然也没翻译多少.所以今天也发不了第五章的翻译了,就发几个 ...

  4. “全栈2019”Java多线程第二十一章:同步代码块产生死锁的例子

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  5. “全栈2019”Java异常第二十一章:finally不被执行的情况

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  6. “全栈2019”Java第二十一章:流程控制语句中的决策语句if

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. 2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(二) controller

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第二十一章-授予身份与切换身份(二) 1.回顾 ...

  8. 2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(一) table、entity、service、dao

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第二十一章 授予身份与切换身份(一) 1.使用场景 某个领导因为某 ...

  9. python 教程 第二十一章、 扩展Python

    第二十一章. 扩展Python /* D:\Python27\Lib\Extest-1.0\Extest2.c */ #include <stdio.h> #include <std ...

随机推荐

  1. scrapy-redis功能简介

    connection:连接redis最基本文件 default:默认值设置文件 dupefiler_key 保存指纹 dupefilter:替换scrapy默认的url去重器 piklecompat: ...

  2. java日志概述和原理

    OK,现在我们来研究下Java相关的日志. 日志记录是应用程序运行中必不可少的一部分.具有良好格式和完备信息的日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源.对于开发人员来说,在程序中使 ...

  3. 用powershell实现:“倩女幽魂姥姥”版《语音报警系统》

    ------[第一章 前言]------ win7,及以上版本中,是自带语音库的,系统自带一套女声中文库,一套女声英文库.用powershell调用,从而发音,制作报警系统.是一件太简单的事情,只需要 ...

  4. Jenkins初识

    Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 功能 Jenkins功能包括 ...

  5. MySQL数据库中实现对中文字段按照首字字母排序

    转载自网络! 1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都存在. 如果这个问题不解决, ...

  6. MUI 页面传值,因为用的是H5+ plus方法所以要在真机上才能测试出效果

    页面a.html <!doctype html> <html> <head> <meta charset="UTF-8"> < ...

  7. wpf图片浏览器,实现缩放平移操作图片切换等功能

    wpf经常要用到控件来查看图片,尤其是高清图片,于是做了一个例子: 1.定义图片的队列,用list来存. private readonly List<string> files; 2.切换 ...

  8. Vsftp的PASV mode(被动模式传送)和Port模式解释

    什么叫做PASV mode(被动模式传送)?他是如何工作的?FTP的连接一般是有两个连接的,一个是客户程和服务器传输命令的,另一个是数据传送的连接.FTP服务程序一般会支持两种不同的模式,一种是Por ...

  9. 解决mysql、vsftp远程连接速度慢的问题

    以 centOS 6.3(其他操作系统类似,同样适用)说明: 当我们的服务都配置正常的情况下,有时会出现连接速度慢而导致连接失败的问题 问题分析:这些情况一般都是DNS解析惹的祸 mysql连接速度慢 ...

  10. canvas-海底气泡(面向对象编程)

    需求:自动生成若干气泡,从海底往上浮: 1.基本的HTML结构: <!DOCTYPE html> <html> <head lang="en"> ...