# -*- 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. CentOS 7 学习(二) 配置Nginx反向代理

    CentOS 7 学习(二) 配置Nginx反向代理 Nginx可以通过php-fpm来运行PHP程序,也可以转向apache,让apache调用php程序来运行. 不过对于Nginx来说,其反向代理 ...

  2. CenOS 6.5下 mysql自动备份

      1.mysql备份命令是mysqldump,自动执行可以用cron,但是文件名需要带有时间标志,shell处理起来很麻烦,我就选择了python来解决 2.文件名用time模块来解决,执行系统命令 ...

  3. Android快速实现上传项目到Github

    本文为skylinelin原创,转载请注明出处! 一.简介 现在在网上浏览关于Git的文章,基本上都是使用命令行(Git Bash),命令行效率是很高的,但是有一定的复杂性,现在我们看如何用AS来讲项 ...

  4. jmeter监控服务资源

    转:http://www.cnblogs.com/chengtch/p/6079262.html  1.下载需要的jmeter插件 如图上面两个是jmeter插件,可以再下面的链接中下载: https ...

  5. 【java设计模式】代理模式

    计算类中方法运行时间的几种方案: Client: package com.tn.proxy; public class Client { public static void main(String[ ...

  6. 数据分析与展示——Pandas数据特征分析

    Pandas数据特征分析 数据的排序 将一组数据通过摘要(有损地提取数据特征的过程)的方式,可以获得基本统计(含排序).分布/累计统计.数据特征(相关性.周期性等).数据挖掘(形成知识). .sort ...

  7. Python3 学习Python流程--试水中

    二.基础语法之后可以搭载服务器练习: 教程 一.1.Python 搭建环境. 初学基本语法 :Python基本语法 2.推荐 IDE :  PyCharm CE 下载 菜鸟教程都是基础语法,可以对py ...

  8. iOS 友盟推送,应用内推送启动图推送闪动黑屏,插屏推送方法报错

    以前都是用的极光推送,应公司需求要求使用友盟推送,为了以后是有分享都适用,,, 友盟推送文档,下载demo 感觉比极光用着要简单顺手 一切就绪后,开始发送消息测试,,,,,搞了半天没有发过来消息 原来 ...

  9. Java JTS & 空间数据模型

    空间数据模型 判断两个几何图形是否存在指定的空间关系.包括: 相等(equals).分离(disjoint).相交(intersect).相接(touches).交叉(crosses).包含于(wit ...

  10. ubuntu12.04destdrop删除不必要的软件

    sudo apt-get -y --auto-remove purge unity unity-2d*  sudo apt-get -y purge empathy  sudo apt-get -y ...