flask 中的常用組件的使用 ,virtualenv組件和 pipreqs組件
阿新 • • 發佈:2018-07-26
target config param 表單 range fun 線程 safe required
一 。 flask 中連接的數據庫的組件 DButils
#!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql from DBUtils.PooledDB import PooledDB, SharedDBConnection POOL = PooledDB( creator=pymysql, # 使用鏈接數據庫的模塊 maxconnections=20, # 連接池允許的最大連接數,0和None表示不限制連接數 mincached=2, # 初始化時,鏈接池中至少創建的空閑的鏈接,0表示不創建 maxcached=5, #鏈接池中最多閑置的鏈接,0和None不限制 maxshared=0, # 鏈接池中最多共享的鏈接數量,0和None表示全部共享。PS: 無用,因為pymysql和MySQLdb等模塊的 threadsafety都為1,所有值無論設置為多少,_maxcached永遠為0,所以永遠是所有鏈接都共享。 blocking=True, # 連接池中如果沒有可用連接後,是否阻塞等待。True,等待;False,不等待然後報錯 maxusage=None, # 一個鏈接最多被重復使用的次數,None表示無限制 setsession=[], # 開始會話前執行的命令列表。如:["set datestyle to ...", "set time zone ..."]ping=0, # ping MySQL服務端,檢查是否服務可用。# 如:0 = None = never, 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=‘day116‘, charset=‘utf8‘ ) def func():# 去連接池中獲取一個連接 conn = POOL.connection() cursor = conn.cursor() # cursor.execute(‘select * from users‘) print(‘開始去執行了‘) cursor.execute(‘select sleep(5)‘) result = cursor.fetchall() # 將連接返還到連接池中 conn.close() # print(result) def func2(): conn = POOL.connection() cursor = conn.cursor() # cursor.execute(‘select * from users‘) print(‘開始去執行了‘,2,3) cursor.execute(‘select sleep(5)‘) result = cursor.fetchall() # 將連接返還到連接池中 conn.close() # print(result) import threading # 多線程的模塊 for i in range(20): t = threading.Thread(target=func) t2 = threading.Thread(target=func2) t.start() t2.start()
二 。 flask 中的 flask-session 組件
將Flask中的session由原來的默認寫到加密cookie中,改成放置到其他數據源,如:redis/memcached/filesystem/mongodb/sqlalchemy(數據庫
在 setttings 中設置的代碼
SECRET_KEY = "asdfasdfasdf" SESSION_TYPE = ‘redis‘ SESSION_REDIS = Redis(host=‘127.0.0.1‘,port=6379)
在 app 中的代碼
from flask import Flask,session,request,redirect from flask_session import Session # 導入這個模塊 from .views.account import account from .views.code import code from .views.student import student def auth(): """ 用戶認證 :return: """ if request.path == ‘/login‘: return None user_info = session.get(‘user_info‘) if user_info: return None return redirect(‘/login‘) def create_app(): app = Flask(__name__) app.config.from_object(‘settings.DevelopmentConfig‘) app.register_blueprint(account) app.register_blueprint(code) app.register_blueprint(student) app.before_request(auth) Session(app) # 把app對象傳進去 return app
三 flask 中的 wtforms 組件:
跟Django中的form組件 一樣 都是用於做表單驗證
from wtforms.fields import simple from wtforms.fields import html5 from wtforms.fields import core from wtforms import widgets from wtforms import validators from wtforms import Form from zzy.utils import sqlhelper class ClsForm(Form): title = simple.StringField( label=‘名稱‘, widget=widgets.TextInput(), render_kw={‘class‘: ‘form-control‘}, validators=[ validators.DataRequired(message=‘班級名稱不能為空‘) ], ) class TestForm(Form): name = simple.StringField( label=‘用戶名‘, validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw={‘class‘: ‘form-control‘} ) """ pwd = simple.PasswordField( label=‘密碼‘, validators=[ validators.DataRequired(message=‘密碼不能為空.‘) ], widget=widgets.PasswordInput(), render_kw={‘class‘: ‘form-control‘} ) pwd_confirm = simple.PasswordField( label=‘重復密碼‘, validators=[ validators.DataRequired(message=‘重復密碼不能為空.‘), validators.EqualTo(‘pwd‘, message="兩次密碼輸入不一致") ], widget=widgets.PasswordInput(), render_kw={‘class‘: ‘form-control‘} ) email = html5.EmailField( label=‘郵箱‘, validators=[ validators.DataRequired(message=‘郵箱不能為空.‘), validators.Email(message=‘郵箱格式錯誤‘) ], widget=widgets.TextInput(input_type=‘email‘), render_kw={‘class‘: ‘form-control‘} ) gender = core.RadioField( label=‘性別‘, choices=( (1, ‘男‘), (2, ‘女‘), ), coerce=int ) city = core.SelectField( label=‘城市‘, choices=( (‘bj‘, ‘北京‘), (‘sh‘, ‘上海‘), ) ) hobby = core.SelectMultipleField( label=‘愛好‘, choices=( (1, ‘籃球‘), (2, ‘足球‘), ), coerce=int ) favor = core.SelectMultipleField( label=‘喜好‘, choices=( (1, ‘籃球‘), (2, ‘足球‘), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int ) """ cls_id = core.SelectField( label=‘請選擇班級‘, # choices=( # (‘bj‘, ‘北京‘), # (‘sh‘, ‘上海‘), # ) choices=[], coerce=int ) def __init__(self, *args, **kwargs): super(TestForm, self).__init__(*args, **kwargs) self.cls_id.choices = sqlhelper.fetchall(sql=‘select id,title from classes‘,args=[],cur=None) def validate_name(self,field): """ 對name進行驗證時的鉤子函數 :param field: :return: """ if field != ‘root‘: raise validators.ValidationError("用戶名必須是root")
不限語言的
四 pipreqs 組件:
安裝: pip3 install pipreqs 使用: pipreqs ./ --encoding=utf-8
# 執行完生產一個 requirements.txt 文件 ,裏面記錄了此項目的所有模塊和版本,
pip3 install -r requirements.txt 可以下載文件裏的所有模塊
不限語言的
五:virtualenv
創建虛擬的環境
安裝: pip3 install virtualenv 命令創建虛擬環境: virtualenv 虛擬環境的名稱 cd 虛擬環境目錄 activate 激活虛擬環境 pip3 install django==1.7 deactivate 退出虛擬環境
flask 中的常用組件的使用 ,virtualenv組件和 pipreqs組件