1.简单flaskweb
# coding=utf-8
from flask import Flask, render_template, request, redirect, session
app = Flask(__name__, template_folder="templates")
app.secret_key = "abc"
USER_DICT= {
"1": {"name": "alex", "age": 19},
"2": {"name": "big", "age": 19},
"3": {"name": "people", "age": 19},
"4": {"name": "person", "age": 19},
}
@app.route("/login", methods=["POST", "GET"])
def login():
print("start")
if request.method == "GET":
return render_template("login.html")
else:
# request.args
user = request.form.get("user")
pwd = request.form.get("pwd")
if user == "alex" and pwd == "123":
session["user_info"] = user # 放到浏览器cookie中
return redirect("/index")
else:
return render_template("login.html", **{"msg": "login fail"})
@app.route("/index")
def index():
user_info = session.get("user_info")
if not user_info:
return redirect("/login")
return render_template("index.html", user_dict=USER_DICT)
@app.route("/detail")
def detail():
user_id = request.args.get("user_id")
return render_template("detail.html", user=USER_DICT.get(user_id))
@app.route("/lgout")
def lgout():
user_info = session.get("user_info")
if not user_info:
return redirect("/login")
return "欢迎"
@app.route("/test")
def test():
dns = {
'tcp_test': {
'nameserver': ['dns1 223.5.5.5: 53', 'dns2 114.114.114.114: 53'],
'hold': ['other 30s', 'refsed 30s', 'nx 30s', 'timeot 30s', 'valid 10s'],
'resolve_retries': '3',
'timeot': 'retry 1s'
},
'http_test': {
'nameserver': ['dns1 223.5.5.5: 53', 'dns2 114.114.114.114: 53'],
'hold': ['other 30s', 'refsed 30s', 'nx 30s', 'timeot 30s', 'valid 10s'],
'resolve_retries': '3',
'timeot': 'retry 1s'
}
}
return render_template("test.j2", **{"dns": dns})
if __name__ == '__main__':
app.run(debug=True)
2.html文件
- login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<h1> 登录 </h1>
<form method="post">
<input type="text" name="user">
<input type="password" name="pwd">
<input type="submit" name="submit"> {{ msg }}
</form>
</body>
</html>
- index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for key, item in user_dict.items() %}
<li src="/detail?uid={{ key }}">{{item.name}} {{item.age}} </li>
{% endfor %}
</body>
</html>
- detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<li>{{user.name}} {{user.age}}</li>
</body>
</html>
3.附加内容
"""
- 迭代器: 内部实现__next__方法, 帮助我们向后一个一个取值
- 生成器: 一个函数内不存在yield关键字: v = 函数()
应用场景:
- range/xrange
- py2: xrange(1000000)
- py3: range(1000000)
- redis 中的hscan_iter
- 每次取12个
- stark组件
- django 模板渲染时可以返回一个生成器对象
- 可迭代对象: 一个类内部实现了__iter__方法, 方法返回一个迭代器
class Foo(object):
def __iter__(self):
return iter([1,2,3,4])
obj = Foo()
应用场景
- wtforms中循环打印所有字段对象
- LocalProxy
- list, dict, tuple
总结: 如果想要一个对象可以被循环, 必须有一个__iter__方法
- 装饰器: 不改变原函数代码的基础上, 在执行前后进行定制操作
- 手写
- 应用场景:
- flask路由系统
- flask before_request
- csrf
- django内置
- functiontolls warp函数
"""
参考:这一系列flask都是老男孩2018年全栈8期
https://www.cnblogs.com/wupeiqi/aticles/7552008.html