Flask笔记
# -*- coding: utf-8 -*-
from flask import Flask,render_template,request,redirect,session,url_for
import time app = Flask(__name__,template_folder="templates")
app.secret_key = "A" #类似于加密盐
app.config["SERVER_NAME"] = "jianping.com"
import functools
def auth(func): @functools.wraps(func) #解决函数名重复的冲突问题
def inner(*args,**kwargs):
if not session.get("user_info"):
return redirect("/login")
return func(*args,**kwargs)
print(inner.__name__)
return inner @app.route("/index",)
@auth # index = auth(index)=inner
def index():
return render_template("index.html") @app.route("/text")
@auth
def text():
return render_template("index.html") @app.route("/login",methods=["POST","GET"])
def hello_world():
if request.method == "GET":
return render_template("login.html")
else:
username = request.form.get("username")
password = request.form.get("password")
if username == "张建平" and password == "":
session["user_info"] = "QQ"
return redirect("/index")
return render_template("login.html",msg="用户名密码错误") @app.route("/one",subdomain="zhang")
def one(): return "草拟大爷" @app.route("/two",subdomain="cheng")
def two():
return "草拟妹" if __name__ == '__main__':
app.run()
flask_one
# -*- coding: utf-8 -*-
from flask import Flask,url_for,views app = Flask(__name__) def auth(func):
def inner(*args,**kwargs):
result = func(*args,**kwargs)
print("============会执行")
return result
return inner #函数方法
# @app.route("/index/<int:nid>",endpoint="xx") def index(nid):
# url_for("xx",nid=123)
print(nid)
return "Index" app.add_url_rule("/index/<int:nid>",view_func=index,defaults={"nid":444},strict_slashes=False) #加上默认值不管前端传什么值都默认用后端的,虽然用后端的 #类方法
# class IndexView(views.MethodView):
# decorators = [auth,]
# def get(self):
# v = url_for("index")
# print(v)
# return "GET————————"
# def post(self):
# return "GET=============="
#
# app.add_url_rule("/index",view_func=IndexView.as_view(name="index")) if __name__ == '__main__':
app.run()
视图
# -*- coding: utf-8 -*-
from flask import Flask,url_for,request,redirect,render_template,jsonify,make_response
from urllib.parse import urlencode,quote,unquote app = Flask(__name__) @app.route("/index",endpoint="xx")
def index():
get_data = request.args #get_data:ImmutableMultiDict
get_dict = get_data.to_dict() #将上边的结果转换为字典
get_dict["xx"] = "" #给字典设置值
url = urlencode(get_dict) #浏览器url?后边的地址 print(request.query_string) #上边的url,不过是byte类型的
val = "%E8%8D%89%E6%8B%9F%E5%A4%A7%E7%88%B7" #url中的中文显示
print(unquote(val)) #将上边的火星文转换为中文
res = "好好学习天天向上"
print(quote(res)) #将中文转换为火星文 ret = {"name":"alex"}
print(type(jsonify(ret))) #<class 'flask.wrappers.Response'>
# return jsonify(ret) #返回的结果是json字符串
response = make_response("<h1>xxxxx</h1>") #经过make_response处理之后可以有一些功能
# response.headers["xxx"] = "ooo"
# print(response)
return response if __name__ == '__main__':
app.run()
请求响应
# -*- coding: utf-8 -*-
from flask import Flask,url_for,request,redirect,render_template,jsonify,make_response,Markup
from urllib.parse import urlencode,quote,unquote
app = Flask(__name__) def text(a1,a2):
return a1+a2 @app.template_global() #设置了全局变量及时不用传也可以共享
def sb(a1,a2):
return a1+a2+100 @app.template_filter()
def db(a1,a2,a3):
return a1+a2+a3 @app.route("/index",endpoint="xx")
def index():
v1 = "字符串"
v2 = [11,22,33]
v3 = {"k1":"v1","k2":"v2"}
v4 = Markup("<input type='text' />")
v5 = "<input type='text' />" #浏览器显示字符串
return render_template("index.html",v1=v1,v2=v2,v3=v3,v4=v4,v5=v5,text=text) if __name__ == '__main__':
app.run()
模板语言
# -*- coding: utf-8 -*- from flask import Flask,session,Session
from urllib.parse import urlencode,quote,unquote
from werkzeug.local import LocalProxy app = Flask(__name__)
app.secret_key = "HQ"
app.config["SESSION_COOKIE_NAME"] = "session_key"
"""
'SESSION_COOKIE_NAME': 'session',
'SESSION_COOKIE_DOMAIN': None,
'SESSION_COOKIE_PATH': None,
'SESSION_COOKIE_HTTPONLY': True,
'SESSION_COOKIE_SECURE': False,
'SESSION_REFRESH_EACH_REQUEST': True,
'PERMANENT_SESSION_LIFETIME': timedelta(days=31)
""" @app.route("/index",endpoint="xx")
def index():
session['xxx'] = 123
session['xxx1'] = 123
return "xxx" if __name__ == '__main__':
app.run()
session
# -*- coding: utf-8 -*- from flask import Flask,session,Session,flash,get_flashed_messages,redirect,render_template,request
app = Flask(__name__)
app.secret_key = "HQ" #一个视图函数设置,另一个视图函数取值 @app.route("/users")
def index():
# msg = request.args.get("msg","") msg = session.get("msg")
print(msg)
if msg:
del session["msg"]
v = get_flashed_messages()
print(v)
msg = ""
return render_template("flash.html",msg=msg) @app.route("/useradd")
def index_add():
session["msg"] = "添加成功======="
flash("添加成功")
return redirect("/users") if __name__ == '__main__':
app.run()
闪现
# -*- coding: utf-8 -*- from flask import Flask
app = Flask(__name__)
app.secret_key = "HQ" #类似于中间件的操作 @app.before_request
def process_request1():
print("process_request1===================1") @app.after_request
def process_response1(response):
print("process_response1==================1")
return response @app.before_request
def process_request2():
print("process_request2====================2") @app.after_request
def process_response2(response):
print("process_response2===================2")
return response @app.route("/index")
def index():
print("index")
return "INDEX" @app.route("/order")
def order():
print("order")
return "ORDER" @app.route("/text")
def text():
print("text")
return "TExT" if __name__ == '__main__':
app.run()
扩展
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <h1>{{msg}}</h1> <h1>welcome to my index</h1> <hr>
v1:{{v1}}
v2:{{v2}}
v3:{{v3}}
v4:{{v4}}
v5:{{v5}}
text{{text(1,2)}}
<br>
<hr>
<!--可循环-->
{% for item in v2 %}
v2:{{item}}
{% endfor %}
<hr>
<!--字典可循环-->
{% for k,v in v3.items() %}
{{k}},{{v}}
{% endfor %}
<br>
{{v3.k1}}
{{v3.get("k1")}} <hr> {{sb(1,2)}} <br>
{{1|db(2,3)}}
<hr> <!--类似于for循环-->
{% macro xxxx(name,type='text',value='') %}
<input type="{{ type }}" name="{{ name }}" value="{{ value }}" >
<input type="{{ type }}" name="{{ name }}" value="{{ value }}" >
<input type="{{ type }}" name="{{ name }}" value="{{ value }}" >
{% endmacro %} {{ xxxx("zhang")}} <hr> <img src="/static/school.png" alt=""> </body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎访问</h1>
<form method="post">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit">
{{msg}}
</form>
</body>
</html>
login.html
# -*- coding: utf-8 -*-
from flask import Flask,url_for
app = Flask(__name__) from werkzeug.routing import BaseConverter class RegexConverter(BaseConverter):
"""
自定义URL匹配正则表达式
""" def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex def to_python(self, value):
"""
路由匹配时,匹配成功后传递给视图函数中参数的值
:param value:
:return:
"""
return int(value) def to_url(self, value):
"""
使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
:param value:
:return:
"""
val = super(RegexConverter, self).to_url(value)
return val app.url_map.converters["xxx"] = RegexConverter @app.route("/index/<xxx('\d+'):nid>",endpoint="xx")
def index(nid):
url_for("xx",nid=123)
return "Index" if __name__ == '__main__':
app.run()
正则表达式
前端参数传递:
{#前端url传参 {{ url_for('index',qq=7) }}#}
闪现是基于session实现的,先设置,然后删除,闪现,顾名思义,只是出现一次就消失了,flash设置值;
get_flashed_messages获取值(只能获取一次,第二次获取不到任何东西)
Flask笔记的更多相关文章
- flask笔记(三)Flask 添加登陆验证装饰器报错,及解析
Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...
- Flask笔记1
Flask笔记 首先明确一下,要运行一个动态网页,我们需要 一个 Web 服务器来监听并响应请求,如果请求的是静态文件它就直接将其返回,如果是动态 url 它就将请求转交给 Web 应用. 一个 We ...
- Flask笔记:RESTful
RESTful是用于前台和后端进行通信的一种规范或者说一种风格,采用的是HTTP和HTTPS协议,数据传输的格式使用的都是JSON,而不是XML.通常,RESTful的URL中只有名词,没有动词,而且 ...
- Flask笔记(一)
first_flask_project.py # 从flask这个包中导入Flask这个类 # Flask这个类是项目的核心,以后很多操作都是基于这个类的对象 # 注册url.注册蓝图等都是基于这个类 ...
- flask笔记3-模板
flask框架使用jinja2模板引擎.简单的说,模板就是一个纯html文件中夹杂着占位符,在渲染模板时用真实变量值替换占位符,就形成了最终的前台页面. 1.模板存放位置: 默认情况下,flask在根 ...
- flask笔记2-程序的基本结构
第一个flask web程序 1.初始化(所有flask程序都必须创建一个程序实例,程序实例是Flask类的对象): from flask import Flask app = Flask(__nam ...
- flask笔记1-安装
1.创建应用的根目录: 2.在根目录下创建独立的虚拟python运行环境,创建完成后当前目录会有一个文件夹,即该独立环境(使用--no-site-pachages参数将不会复制任何系统python环境 ...
- flask笔记---url、变量规则
1.路由: route() 装饰器用于把一个函数绑定到一个 URL,可以动态变化 URL 的某些部分,还可以为一个函数指定多个规则,从而方便用户访问与记忆. 例子: @app.route('/') # ...
- flask笔记二
web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLE ...
- flask笔记一
最近学习flask,由于web开发方面接触的并不是很多,所以看官方文档有点焦头烂额,好多的概念不理解. <Flask web 开发>比较基础,先用这本书做个入门. 1.Flask实例化对象 ...
随机推荐
- Javascript中的Microtask和Macrotask——从一道很少有人能答对的题目说起
首先我们来看一道题目,如下javascript代码,执行后会在控制台打印出什么内容? async function async1() { console.log('async1 start'); aw ...
- bash shell快捷键[转]
生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 Ctrl + a :移到命令行首 Ctrl + e :移到命令行尾 Ctrl + f :按字符前移(右向) ...
- bzoj 4719: [Noip2016]天天爱跑步
Description 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.?天天爱跑步?是一个养成类游戏,需要 玩家每天按时上线,完成打卡任务.这个游戏的地图可以看作一一 ...
- C#中级-通过注册表读取Windows Service程序执行路径
一.前言 假设我们的C#解决方案中有多个程序应用,如:Web应用.控制台程序.WPF程序应用和Windows服务应用. 那么这些非Windows Service应用程序怎么在代码中找到W ...
- js回到顶部------转载
[1]锚点 使用锚点链接是一种简单的返回顶部的功能实现.该实现主要在页面顶部放置一个指定名称的锚点链接,然后在页面下方放置一个返回到该锚点的链接,用户点击该链接即可返回到该锚点所在的顶部位置 [注意] ...
- HTML5 矩阵变换
transforms 使用图形上下文对象的transforms方法修改变换矩阵,该方法的定义如下: context.transform(m11,m12,m21,m22,dx,dy); 其中m11,m1 ...
- FPGA浮点数定点化
因为在普通的fpga芯片里面,寄存器只可以表示无符号型,不可以表示小数,所以在计算比较精确的数值时,就需要做一些处理,不过在altera在Arria 10 中增加了硬核浮点DSP模块,这样更加适合硬件 ...
- K:枚举的线程安全性及其序列化问题
枚举是如何保证线程安全的且其在序列化和反序列化的操作中是单例的? 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关 ...
- Git与GitHub学习笔记(八)git如何同时同步提交到码云和GitHub上
前言: 今天github push代码一直push不上去,打算就备份一份代码带国内开源码云上. Github容易出现的情况是: 国内访问速度比较慢, 如果被墙掉的话,就直接没发使用了 如果开源个PHP ...
- Linux入门篇(二)——文件
这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...