python-Web-flask-视图内容和模板知识点西宁街


Posted in Python onAugust 23, 2019

基本使用

#设置cookie值

@app.route('/set_cookie')

def set_cookie():

  response = make_response("set_cookie")

  response.set_cookie("name","zhangsan")

  response.set_cookie("age","13",10) #10秒有效期

  return response

#获取cookie

@app.route('/get_cookie')

def get_cookie():

  #获取cookie,可以根据cookie的内容来推荐商品信息

  # name = request.cookies['haha']

  name = request.cookies.get('name')

  age = request.cookies.get('age')

return "获取cookie,name is %s, age is %s"%(name,age)

 

#设置SECRET_KEY

app.config["SECRET_KEY"] = "fhdk^fk#djefkj&*&*&"

#设置session

@app.route('/set_session/<path:name>')

def set_session(name):

  session["name"] = name

  session["age"] = "13"

  return "set session"

#获取session内容

@app.route('/get_session')

def get_session():

  name = session.get('name')

  age = session.get('age')

return "name is %s, age is %s"%(name,age)

session的存储依赖于cookie,在cookie保存的session编号

session编号生成,需要进行加密,所以需要设置secret_key secret_key的作用参考:

https://segmentfault.com/q/1010000007295395

上下文:保存的一些配置信息,比如程序名、数据库连接、应用信息等

相当于一个容器,保存了 Flask 程序运行过程中的一些信息。

Flask中有两种:请求上下文(session,cookie),应用上下文(current_app,g)

current_app,g是全局变量:

current_app.test_value='value'

g.name='abc' # g是一个响应里的全局变量可跨文件

渲染模板:

from flask import Flask,render_template

app = Flask(__name__) #默认省略了三个参数,static_url_path, static_folder, template_folders

 

def adds(a,b):

  return a+b

@app.route('/')

def hello_world():

  #定义数据,整数,字符串,元祖,列表,字典,函数

  num = 10

  str = "hello"

  tuple = (1,2,3,4)

  list = [5,6,7,8]

  dict = {

    "name":"张三",

    "age":13

}

return render_template('file01.html',my_num=num,my_str=str,my_tuple=tuple,my_list=list,my_dict=dict,adds=adds)

《html》

{{}},{{dict[‘name']}},{{dict.get(‘name')}}和{%%},{{adds(1,2)}}


# 模板全局--直接使用

@app.template_global('adds')

def adds(a,b):
   return a+b

过滤器&自定义过滤器

{{ 字符串 | 字符串过滤器 }}

Safe,lower,upper,little,reverse,format

{#防止转义#}

{{ str1 | safe}} 或 在方法里str2 = Markup("<b>只有学习才能让我快乐</b>")

{{ 列表 | 列表过滤器 }}

First,last,length,sum,sort
def do_listreverse(li):

  # 通过原列表创建一个新列表

  temp_li = list(li)

  # 将新列表进行返转

  temp_li.reverse()

  return temp_li

app.add_template_filter(do_listreverse,'lireverse') # 或1

@app.template_filter('lireverse') # 或2

def do_listreverse(li):

 # 通过原列表创建一个新列表

 temp_li = list(li)

 # 将新列表进行返转

 temp_li.reverse()

 return temp_li
<h2>my_array 原内容:{{ my_array }}</h2>

<h2> my_array 反转:{{ my_array | lireverse }}</h2>

宏、继承、包含

宏

{% macro input(name,value='',type='text') %}

  <input type="{{type}}" name="{{name}}" value="{{value}}">

{% endmacro %}

{{ input('name',value='zs')}} // 调用

继承

父模板base:

{% block top %}

 顶部菜单

{% endblock top %}

子模板:

{% extends 'base.html' %}

{% block content %}

 需要填充的内容

{% endblock content %}

包含

{% include 'hello.html' %}

Flask 的模板中特有变量和方法

{{config.DEBUG}}

输出:True

{{request.url}}

输出:http://127.0.0.1

{{ g.name }}

{{url_for('home')}} // url_for 会根据传入的路由器函数名,返回该路由对应的URL

{{ url_for('post', post_id=1)}}

这个函数会返回之前在flask中通过flask()传入的消息的列表,flash函数的作用很简单,可以把由Python字符串表示的消息加入一个消息队列中,再使用get_flashed_message()函数取出它们并消费掉

{%for message in get_flashed_messages()%}

  {{message}}

{%endfor%}

模板规则:

<form action="{{ url_for('login') }}" method="post">

<link rel="stylesheet" href="{{ url_for('static',filename='css.css') }}" rel="external nofollow" >

web表单

if request.method == 'POST':

    # post请求的数据

    print(request.form.get('uname'))

    print(request.form.get('upass'))

    # 存session

    return redirect("/")

# get请求的数据

  print(request.args.get('uname'))

  print(request.args.get('upass'))

  # post请求的数据

  print(request.form.get('uname'))

  print(request.form.get('upass'))

CSRF

from flask_wtf import CSRFProtect

#设置SECRET_KEY

app.config["SECRET_KEY"] = "fjkdjfkdfjdk"

#保护应用程序

CSRFProtect(app)
{#设置隐藏的csrf_token,使用了CSRFProtect保护app之后,即可使用csrf_token()方法#}

<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">

希望以上整理的内容能够帮助到大家,感谢大家对三水点靠木的支持。

Python 相关文章推荐
python连接sql server乱码的解决方法
Jan 28 Python
利用Fn.py库在Python中进行函数式编程
Apr 22 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
Jul 11 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
python3的print()函数的用法图文讲解
Jul 16 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
python实现图像拼接功能
Mar 23 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
python matplotlib绘制三维图的示例
Sep 24 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
python 实现socket服务端并发的四种方式
Dec 14 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 #Python
python3 selenium自动化 下拉框定位的例子
Aug 23 #Python
python Web flask 视图内容和模板实现代码
Aug 23 #Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
Aug 23 #Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 #Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 #Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 #Python
You might like
php获取后台Job管理的实现代码
2011/06/10 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python计算一个文件里字数的方法
2015/06/15 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
详解python中docx库的安装过程
2019/11/08 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
优纳科技软件测试面试题
2012/05/15 面试题
修理厂厂长岗位职责
2014/01/30 职场文书
策划创业计划书
2014/02/06 职场文书
竞选部长演讲稿
2014/04/26 职场文书
树转促学习心得体会
2014/09/10 职场文书
重温入党誓词主持词
2015/06/29 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers