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天代码

原文地址:https://www.cnblogs.com/gyh412724/p/10139242.html