flask的CBV,flash,Flask-Session,及WTForms-MoudelForm

1,CBV:

  • from flask import vews
  • class LoginView(views.MethodView):
    • def get(self):
      • return "雪雪其实也很好,"
    • def post(self):
      • return "听说雪人很要走了,那些等有机会,等有时间,都觉的遥远了"
  • app.add_url_rule("/login", endpoint=None, view_func=LoginView.as_view("login"))

2,flask:

  • from flask import flask,get_flash_messages
  • flash("雪雪", "tag")   # 闪存
  • get_flash_messages("tag")

3,Flask-Session

  • from flask_session import Session
  • from flask import session
  • app.config["SESSION_TYPE"] = "redis"
  • app.config["SESSION_REDIS"] = Redis("127.0.0.1", 6379, db=7)
  • Session(app)

4,WTForms - MoudelForm

  • from wtfroms.field import simple,core
  • from wtforms import Form,validators
  • class LoginForm(Form):
    • username = simple.StringField(label= "用户名")
  • loginForm = LoginForm()
  • render_template("login.html", loginForm=loginForm)
  • {{ loginForm.username }}
  • {{ loginForm.password }}
  • {{ loginForm.username.errors.0 }}
  • loginForm = LoginForm(request.forms)
  • if not loginForm.validata():
    • render_template("login.html", loginForm)

具体代码:

CBV的写法:

from flask import Flask, flash, get_flashed_messages,render_template
from flask import views
# 实例化Flask对象
app = Flask(__name__)  # type: Flask
app.secret_key = "miss"


@app.route("/")
def index():
    # 这个flash取完值就没有了,一次性的事
    flash("xuexue", "小老弟") flash("xiaoxue") return "我的头可不是面团捏的!!!" # CBV的写法 class LoginClass(views.MethodView): # get请求的方法 def get(self): print(get_flashed_messages("小老弟")) print(get_flashed_messages()) return render_template("login.html") # 提交数据的方法 def post(self): return "来了, 老弟~~~" # 注册路由 app.add_url_rule("/login", view_func=LoginClass.as_view("login")) @app.before_first_request def asd(): # 在这根据flash判断是不是第一次请求 # 第一次请求,就把flash的值取走, print("bf1") return "不知道该写什么了..." if __name__ == '__main__': app.run(debug=True)

APP-flask-Session

from flask import Flask,render_template, redirect, session
from flask import views
from redis import Redis  # 这个必须写,重新封装Redis的时候用
from flask_session import Session  # 用了这个Session就不用指定secret_key = xxxx
# 实例化一个 Flask对象
app = Flask(__name__)  # type:Flask
app.config["SESSION_TYPE"] = "redis"
app.config["SESSION_REDIS"] = Redis("127.0.0.1", 6379, db=7)  # db表示能开几个服务
# 实例化一个Session的对象把Flask数理化的对象传进去,就不用指定secret_key=xxx了
Session(app)

@app.route("/")
def index(): session["user"] = "雪人" return "雪人哈哈哈哈哈~~~~" class LoginClass(views.MethodView): def get(self): print(session.get("user")) # 7b97e0ef-2a14-4725-842e-848fde4d2f15 # 和uuid的值特别的像 return render_template("login.html") def post(self): return "啧啧啧..." app.add_url_rule("/login", view_func=LoginClass.as_view("login")) if __name__ == '__main__': app.run(debug=True)

app的视图函数

from flask import Flask,render_template, request
from flask import views
from wtforms.fields import simple, core
from wtforms import Form
from wtforms import validators
from wtforms import widgets # CBV的写法 # 指定登录的类继承Form class LoginForm(Form): # 定义校验的字段 username = simple.StringField( label="用户名", # 要校验该字段的内容 validators=[ validators.DataRequired(message="不能为空"), validators.Length(min=5, max=10, message="用户名不能小于5个字符求不能大于10个字符") ], # widget=widgets.TextInput render_kw={"class": "my_username"} # 在标签上加一个样式类  ) password = simple.PasswordField( label="密码", # 要校验该字段的内容 validators=[ validators.DataRequired(message="不能为空"), validators.Length(min=6,message="密码最少要6位"), validators.Length(max=12, message="密码至多12位"), validators.Regexp(regex="\d+", message="密码必须是纯数字"), ], render_kw={"class": "my_password"} ) # 注册的Form class RegisterForm(Form): username = simple.StringField( label="用户名", validators=[ validators.DataRequired(message="用户名不能为空"), ], render_kw={"class": "my_username"} ) nickname = simple.StringField( label="昵称", validators=[ validators.DataRequired(message="昵称不能为空") ], render_kw={"class": "my_username"} ) password = simple.PasswordField( label="密码", validators=[ validators.DataRequired(message="密码不能为空"), validators.Length(min=6, max=12, message="密码大于6小于12"), validators.Regexp(regex="\d+", message="密码必须是数字"), ], render_kw={"class": "my_password"} ) re_password = simple.PasswordField( label="重复密码", validators=[ validators.EqualTo(fieldname="password",message="两次密码不一致"), ], ) email = simple.StringField( label="邮箱", validators=[ validators.Email(message="格式不正确"), ], render_kw={"class": "my_email"} ) gender = core.RadioField( label="性别", coerce=int, # 拿到的是性别在数据库中的前边数字 choices=( (1, "女"), (2, "男"), ), default=1 # 设置默认值为1  ) hobby = core.SelectMultipleField( label="爱好", coerce=int, choices=( (1, "烤串"), (2, "烤面包片"), (3, "烤鱼"), (4, "pizza"), (5, "蝎王府"), ), default=(3,5) ) # 实例化一个Flask的对象 app = Flask(__name__) # type:Flask  @app.route("/") def index(): return "我的头可不是面团捏的" # 登录页面 class LoginView(views.MethodView): def get(self): loginForm = LoginForm() return render_template("login.html", loginForm=loginForm) def post(self): # 将获取到的数据放到LoginForm中进行 loginForm = LoginForm(request.form) # 通过校验的数据 if loginForm.validate(): return "登录成功" else: return render_template("login.html", loginForm=loginForm) app.add_url_rule("/login", view_func=LoginView.as_view("login")) # 注册的业务逻辑函数 class RegisterView(views.MethodView): def get(self): # 实例化注册的校验类 regForm = RegisterForm() if regForm.validate(): return "注册通过了校验" else: return render_template("register.html", regForm=regForm) def post(self): regForm = RegisterForm(request.form) if regForm.validate(): return "通过校验的数据" else: return render_template("register.html", regForm=regForm) app.add_url_rule("/register", view_func=RegisterView.as_view("register")) if __name__ == '__main__': app.run(debug=True)

5,DBUtils数据连接池

import pymysql
from DBUtils.PooledDB import PooledDB
# 实例化pooleDB对象
POOL = PooledDB(
    creator=pymysql,  # 使用连接数据库的模块
    maxconnections=6,  # 连接池允许的最大连接数, 0和None表示不限制连接数
    mincached=2,  # 初始化时,连接池中至少创建的空闲的连接,0表示不创建
    maxcached=5, # 连接池中最多闲置的连接, 0和None不限制
    maxshared=3,  # 连接池中最多共享的连接数量, 0和None表示全部共享.ps:无用,因为pymysql和mysqldb等模块的threadsafety都为1, 所有值无论设置为多少,maxacahed永远为0,所以永远是共享所有连接都共享
    blocking=True,  # 连接池中如果没有可用连接,是否阻塞等待.True,等待,False,不等待然后报错
    maxusage=None,  # 一个连接最多被重复使用的次数, None表示无限制
    setsession=[],  # 开始会话前执行的命令列表. 如["set datestyle to ...", "set time zone ..."]
    ping=0,  # ping Mysql服务端,检查是否服务可用. 如: 0 = None = nerver, 1 = default = whenever it is requested, 2 = when a cursor is created 4 = when a query is executed, 7 = always
    host="127.0.0.1",
    port=3306,
    user="root", password="123456", database="test", charset="utf8" ) def func(): # 在连接池中连接 conn = POOL.connection() # 油表使用辟谣mysql cursor = conn.cursor(pymysql.cursors.DictCursor) # 从表中查询数据 cursor.execute('select * from xueren ') result = cursor.fetchall() print(result) conn.close() func()
from DBUtils.PooledDB import PooledDB
import pymysql

class MySQLhelper(object):
    def __init__(self, host, port, dbuser, password, database):
        self.pool = PooledDB(
            creator=pymysql,  # 使用连接数据库的模块
            maxconnections=6,  # 连接池允许的最大连接数, 0和None表示不限制连接数
            mincached=2,  # 初始化时,连接池中至少创建的空闲的连接,0表示不创建
            maxcached=5,  # 连接池中最多闲置的连接, 0和None不限制
            maxshared=3, # 连接池中最多共享的连接数量, 0和None表示全部共享.ps:无用,因为pymysql和mysqldb等模块的threadsafety都为1, 所有值无论设置为多少,maxacahed永远为0,所以永远是共享所有连接都共享 blocking=True, # 连接池中如果没有可用连接,是否阻塞等待.True,等待,False,不等待然后报错 maxusage=None, # 一个连接最多被重复使用的次数, None表示无限制 setsession=[], # 开始会话前执行的命令列表. 如["set datestyle to ...", "set time zone ..."] ping=0, # ping Mysql服务端,检查是否服务可用. 如: 0 = None = nerver, 1 = default = whenever it is requested, 2 = when a cursor is created 4 = when a query is executed, 7 = always host="127.0.0.1", port=3306, user="root", password="123456", database="test", charset="utf8" ) # 创建连接油表 def create_conn_cursor(self): conn = self.pool.connection() cursor = conn.cursor(pymysql.cursors.DictCursor) return conn, cursor # 获取所有的数据(从数据库中) def fetch_all(self, sql, args): conn, cursor = self.create_conn_cursor() cursor.execute(sql, args) result = cursor.fetchall() cursor.close( ) # 插入数据 def insert_one(self, sql, args): conn, cursor = self.create_conn_cursor() res = cursor.execute(sql, args) conn.commit() print(res) conn.close() return res # 更新数据 def update(self, sql, args): conn,cursor = self.create_conn_cursor() res = cursor.execute(sql, args) conn.commit() print(res) conn.close() return res sqlhelper = MySQLhelper("127.0.0.1", 3306, "root", "", "test") # 查询表里所有的数据 res = sqlhelper.fetch_all("select * from xueren where id=%s", (1,)) print(res) # 插入数据 # res = sqlhelper.insert_one("insert into xueren VALUES (%s,%s %s)", (1, "miss", "really")) # print(res) # 更新数据 # res = sqlhelper.update("update user SET name=%s WHERE id=%s", ("哈哈哈"))

猜你喜欢

转载自www.cnblogs.com/ljc-0923/p/10265393.html