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实例化对象 ...
随机推荐
- iOS 接收新消息通知调用系统声音 震动
添加系统框架: #import <AudioToolbox/AudioToolbox.h> 调用震动代码: AudioServicesPlaySystemSound(kSystemSoun ...
- ios 中的循环引用问题及解决
循环引用,指的是多个对象相互引用时,使得引用形成一个环形,导致外部无法真正是否掉这块环形内存.其实有点类似死锁. 举个例子:A->B->C->....->X->B - ...
- SQL Server 文章目录
SQL Server系列: 高可用方案 SQL Server Alwayson概念总结 SQL Server AlwaysOn搭建 SQL Server2016 Alwayson新增功能 SQL Se ...
- 【Linux】Linux学习笔记(完结)
前言 在工作中发现Linux系统的重要性,于是计划重温下Linux,顺便记录笔记方便之后查阅. 磁盘分区 在Linux系统中,每个设备都被当成一个文件来对待:如IDE接口的硬盘文件名为/dev/hd[ ...
- 框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解)
框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解) 一丶什么是RTTI,以及RTTI怎么设计 通过第一讲,我们知道了怎么样升成一个窗口了,以及简单的消息循环. 第二讲则是主要讲解RTTI ...
- [Maximize ∑arr[i]*i of an Array]
Given an array of N integers. Your task is to write a program to find the maximum value of ∑arr[i]*i ...
- type 命令详解
type 作用: 用来显示指定命令的类型,判断出命令是内部命令还是外部命令. 命令类型: alias: 别名 keyword:关键字, shell 保留字 function:函数, shell函数 ...
- what is cdecl?
cdecl这是一个Linux上功能很强大的一个小型程序,它最主要的功能就是能帮助我们解释一个很复杂的C语言声明. 例如,我写了这样一个C语言的一个声明:int *(*g[])(int , floa ...
- 删除SVN版本信息的两种方式
一.在linux下删除SVN版本信息 删除这些目录是很简单的,命令如下 find . -type d -name ".svn"|xargs rm -rf 或者 find . -ty ...
- Vuex- Action的 { commit }
Vuex 中 使用 Action 处理异步请求时,常规写法如下: getMenuAction:(context) =>{ context.commit('SET_MENU_LIST',['承保2 ...