116 flask的cbv flash flask_session组件 WTForms 数据库连接池
主要内容: dragonfire
1 flask的cbv写法:
from flask import Flask, render_template, redirect, request, url_for
from flask import views
app = Flask(__name__)
class LoginView(views.MethodView):
def get(self):
print(url_for('login'))
return render_template("login.html")
def post(self):
userinfo = request.form.to_dict()
username = userinfo.get("username")
password = userinfo.get("password")
if username == '丽丽' and password == "123":
return "登录成功"
else:
return redirect("/login")
app.add_url_rule('/login', view_func=LoginView.as_view(name="login")) # name指定的是别名, 会当做endpoint使用.
app.run(debug=True)
2 flash : Flask中闪现是基于session来实现的,而session存在于服务器端的一个字典里,把session保存起来,取一次值,里面还是有数据,直到你完全删除后才没有值了
a : flash中存数据 flash('字符串')
b: flash中取数据 get_flash_message()
from flask import Flask, request, flash, render_template, get_flashed_messages
from flask import views
app = Flask(__name__)
app.secret_key = "sudden"
# Flask中闪现是基于session来实现的,而session存在于服务器端的一个字典里,把session保存起来,取一次值,里面还是有数据,直到你完全删除后才没有值了。
class LoginView(views.MethodView):
def get(self):
flash(" suddently exist")
return render_template("login.html")
def post(self):
print(get_flashed_messages())
return "login success!"
app.add_url_rule("/ll", view_func=LoginView.as_view(name="ll"))
app.run(debug=True)
3 flask-seesion组件
import redis
from flask import Flask, render_template, request, session
# flask-session组件则将支持session保存到多个地方
from flask_session import Session
app = Flask(__name__)
#将seesion保存在redis中
app.config["SESSION_TYPE"] = 'redis'
app.config["SESSION_REDIS"] = redis.Redis(host='127.0.0.1', port=6379, db=3)
Session(app)
@app.route("/index")
def index():
session["user"] = "123"
ret = session.get("user")
print(ret)
return 'index page'
app.run(debug=True)
# 443abf7c-b240-4e6b-a7ac-14f38505362f
# 在数据库中的取session的值: get session: value值
4 WTForms- 相当于django中的modelform : 是stringfield父类中的field类中的init方法.
from wtforms import Form
from wtforms.fields import simple, core
from wtforms import validators
class RegForm(Form):
(
password = simple.PasswordField(
label="密码",
validators=[
validators.DataRequired(message="密码不能为空"),
validators.length(min=4, max=7, message="密码的长度不能低于4大于7")
],
# 可以控制渲染内容的属性
render_kw={"class": "form-control"}
)
re_password = simple.PasswordField(
label="确认密码",
validators=[
validators.EqualTo(fieldname="password", message="两次密码不一致")
],
# 可以控制渲染内容的属性
render_kw={"class": "my_password"}
)
hobby = core.SelectMultipleField(
label="爱好",
coerce=int,
choices=(
(1, '小姐姐'),
(2, '小哥哥'),
(3, '小萝莉')
),
default=(1,2)
)
submit = simple.SubmitField(
label="提交"
)
在html中的展示:
<body>
<form action="" method="post">
{% for field in rf %}
<div>
{{ field.label }}{{ field }}
</div>
{% endfor %}
</form>
</body>
5 DBUtills 数据库连接池: 116天代码

浙公网安备 33010602011771号