# -*- 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笔记的更多相关文章

  1. flask笔记(三)Flask 添加登陆验证装饰器报错,及解析

    Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...

  2. Flask笔记1

    Flask笔记 首先明确一下,要运行一个动态网页,我们需要 一个 Web 服务器来监听并响应请求,如果请求的是静态文件它就直接将其返回,如果是动态 url 它就将请求转交给 Web 应用. 一个 We ...

  3. Flask笔记:RESTful

    RESTful是用于前台和后端进行通信的一种规范或者说一种风格,采用的是HTTP和HTTPS协议,数据传输的格式使用的都是JSON,而不是XML.通常,RESTful的URL中只有名词,没有动词,而且 ...

  4. Flask笔记(一)

    first_flask_project.py # 从flask这个包中导入Flask这个类 # Flask这个类是项目的核心,以后很多操作都是基于这个类的对象 # 注册url.注册蓝图等都是基于这个类 ...

  5. flask笔记3-模板

    flask框架使用jinja2模板引擎.简单的说,模板就是一个纯html文件中夹杂着占位符,在渲染模板时用真实变量值替换占位符,就形成了最终的前台页面. 1.模板存放位置: 默认情况下,flask在根 ...

  6. flask笔记2-程序的基本结构

    第一个flask web程序 1.初始化(所有flask程序都必须创建一个程序实例,程序实例是Flask类的对象): from flask import Flask app = Flask(__nam ...

  7. flask笔记1-安装

    1.创建应用的根目录: 2.在根目录下创建独立的虚拟python运行环境,创建完成后当前目录会有一个文件夹,即该独立环境(使用--no-site-pachages参数将不会复制任何系统python环境 ...

  8. flask笔记---url、变量规则

    1.路由: route() 装饰器用于把一个函数绑定到一个 URL,可以动态变化 URL 的某些部分,还可以为一个函数指定多个规则,从而方便用户访问与记忆. 例子: @app.route('/') # ...

  9. flask笔记二

    web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLE ...

  10. flask笔记一

    最近学习flask,由于web开发方面接触的并不是很多,所以看官方文档有点焦头烂额,好多的概念不理解. <Flask web 开发>比较基础,先用这本书做个入门. 1.Flask实例化对象 ...

随机推荐

  1. Java并发编程有多难?这几个核心技术你掌握了吗?

    本文主要内容索引 1.Java线程 2.线程模型 3.Java线程池 4.Future(各种Future) 5.Fork/Join框架 6.volatile 7.CAS(原子操作) 8.AQS(并发同 ...

  2. 数据加密,android客户端和服务器端可共用

    安卓中,不管是内网还是外网,数据的传输首要考虑就是安全问题,尤其是用户信息,以及各种密码等敏感信息. 所以说,对数据的加密是很有必要的,尤其是当下物联网蓬勃发展的今天,数据安全尤为重要. 数据加密的方 ...

  3. [array] leetcode-55. Jump Game - Medium

    leetcode-55. Jump Game - Medium descrition Given an array of non-negative integers, you are initiall ...

  4. Libevent源码分析 (1) hello-world

    Libevent源码分析 (1) hello-world ⑨月份接触了久闻大名的libevent,当时想读读源码,可是由于事情比较多一直没有时间,现在手头的东西基本告一段落了,我准备读读libeven ...

  5. SDP(0):Streaming-Data-Processor - Data Processing with Akka-Stream

    再有两天就进入2018了,想想还是要准备一下明年的工作方向.回想当初开始学习函数式编程时的主要目的是想设计一套标准API給那些习惯了OOP方式开发商业应用软件的程序员们,使他们能用一种接近传统数据库软 ...

  6. 正则表达式与grep

    一.回溯引用 1.将页面中合法的标题找出来,使用回溯引用匹配 (需要使用 -E 或 -P 来扩展grep语法支持) 2.查找连续出现的单词 二.前后查找 (grep 只能使用 -P 选项) 1. 向前 ...

  7. 通过 kms 激活 office 2016

    1.管理员模式打开cmd,并切换到office的安装路径 注:office2016默认安装在C:\Program Files\Microsoft Office\Office16,激活其他office自 ...

  8. Android开发之漫漫长途 IX——彻底掌握Binder

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  9. CSS实现商城分类导航效果(hover选择器)

    学完制作出这个导航效果之后,收获最多的是了解了hover选择器的功能,:hover 选择器用于选择鼠标指针浮动在上面的元素.在鼠标移到元素上时向此元素添加特殊的样式(CSS).例如:改变鼠标悬停处的元 ...

  10. Java基础之引用(String,char[],Integer)总结

    1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer  ...