国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
flask插件全家桶集成學(xué)習(xí)

目錄

 

正文

       不得不說(shuō)flask的設(shè)計(jì)要比django要小巧精妙的多了,沒(méi)有那么臃腫,只保留核心功能,其他的都需要自己引入,即各種各樣的插件來(lái)滿足我們的需求,我這里記錄一下自己學(xué)習(xí)項(xiàng)目中用的插件使用方法和一些技巧總結(jié)!

先放一下代碼地址: https://gitee.com/houzheng1216/pythonxuexi/tree/master/flask/fristflask

一 flask-cli

falsk內(nèi)置的腳手架,可代替flask-script管理項(xiàng)目,再也不用寫(xiě)manager.py了

啟動(dòng)項(xiàng)目: 根目錄命令: flask run

開(kāi)啟shell:  flask shell

開(kāi)啟一個(gè)交互式的python shell,用來(lái)訪問(wèn)或處理應(yīng)用數(shù)據(jù)。該指令默認(rèn)激活應(yīng)用上下文,并導(dǎo)入應(yīng)用實(shí)例。
只有應(yīng)用實(shí)例是默認(rèn)導(dǎo)入的,如果需要導(dǎo)入其他對(duì)象,使用shell_context_processor裝飾函數(shù),返回一個(gè)字典對(duì)象,鍵值對(duì)表示額外導(dǎo)入的對(duì)象。

導(dǎo)入:

# 在flask shell 中導(dǎo)入其他對(duì)象,導(dǎo)入后shell可以使用@app.shell_context_processordef make_shell_context():    return dict(models=models, db=db)

 

開(kāi)啟之后默認(rèn)可查看app:

自定義命令:

# 自定義命令,分組命令,使用user管理多個(gè)命令user_cli = AppGroup("user")@user_cli.command("print")  # 指定命令@click.argument("name")  # 指定參數(shù)def print_user(name):    print("this is", name)@user_cli.command("add")@click.argument("num")def add_num(num):    print("result is", num+num)

app中注冊(cè)命令: 

# 添加自定義命令app.cli.add_command(user_cli)

使用命令,flask 分組名稱 命令名稱 參數(shù):

 

二 flask-debugToolbar

 這個(gè)調(diào)試賊好用,簡(jiǎn)單安裝配置使用就完事了

# 配置debugToolbartoolbar = DebugToolbarExtension()app.config['SECRET_KEY'] = 'hou'app.config['DEBUG_TB_INTERCEPT_REDIRECTS'] = False  # 不攔截重定向toolbar.init_app(app)

使用,頁(yè)面右邊:

這里貼一些常用config配置:

 

三 flask-WTF

 

四 falsk-login

Flask-Login 為 Flask 提供用戶 session 的管理機(jī)制。它可以處理 Login、Logout 和 session 等服務(wù)。
將用戶的 id 儲(chǔ)存在 session 中,方便用于 Login/Logout 等流程。
讓你能夠約束用戶 Login/Logout 的視圖
提供 remember me 功能
保護(hù) cookies 不被篡改,這個(gè)可以和flask-admin一起使用,很方便,適合簡(jiǎn)單輕量級(jí)的需求

不過(guò)新出了更強(qiáng)大的權(quán)限框架Pycasbin

定義User模型:

''' flask-login user類必須實(shí)現(xiàn)以下:        is_authenticated 是否屬性        is_active 是否激活屬性        is_anonymous 是否匿名屬性        get_id() 方法, 可以繼承UserMixin,提供了默認(rèn)實(shí)現(xiàn)'''class User(db.Model, UserMixin):    __tablename__ = 'user'  # 表名    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(50))    password = db.Column(db.String(50))    age = db.Column(db.Integer)    write_time = db.Column(db.DateTime, default=datetime.now())    # toString方法    def __repr__(self):        return '<User %r>' % self.name

 

配置:

# 配置flask-loginlogin_manager = LoginManager()login_manager.login_view = 'myuser.login' # 指定跳轉(zhuǎn)登錄函數(shù),權(quán)限攔截時(shí)跳轉(zhuǎn)login_manager.login_message_category = 'info'login_manager.login_message = '請(qǐng)先登錄'login_manager.init_app(app)# 配置回調(diào)函數(shù),必須配置# user session 記錄的是用戶 ID (user_id),回調(diào)函數(shù)的作用就是通過(guò) user_id 返回對(duì)應(yīng)的 User 對(duì)象@login_manager.user_loaderdef load_user(user_id):    print(user_id)  # 登錄成功的時(shí)候會(huì)自動(dòng)獲取主鍵id    return models.User.query.filter_by(id=user_id).first()

 

登錄登出方法:

@user.route('/login/', methods=['GET', 'POST'])def login():    form = LoginForm()  # 實(shí)例化form對(duì)象    if request.method == "POST" and form.validate_on_submit():        username = request.form.get('username')        password = request.form.get('password')        user = User.query.filter_by(name=username, password=password).first()        if user:            # 將用戶信息注冊(cè)到flask-login中            login_user(user)            return redirect(url_for('myuser.get_all_user'))        else:            flash("請(qǐng)重新輸入用戶名和密碼")    return render_template('login.html', form=form)@user.route('/logout/', methods=['GET', 'POST'])@login_required   # 裝飾器,必須登錄才能有權(quán)限def logout():    logout_user()    return redirect(url_for('myuser.get_all_user'))

 

權(quán)限控制:

使用@login_required 注解攔截函數(shù)

和admin一起使用,攔截后臺(tái)數(shù)據(jù)管理頁(yè)面,不會(huì)admin的可以先看flask-admin:

class MyModelView(ModelView):    can_delete = True    can_create = False  # 是否能創(chuàng)建    # Override displayed fields    column_list = ('name', 'age')  # 顯示的屬性    # 重寫(xiě)方法實(shí)現(xiàn)權(quán)限控制    def is_accessible(self):        print(current_user.name)  #  獲取login的當(dāng)前用戶        if current_user.is_authenticated and current_user.name == "Tom":            return True        return False    # 訪問(wèn)頁(yè)面沒(méi)有權(quán)限時(shí)回調(diào)函數(shù),可跳轉(zhuǎn)登錄    def inaccessible_callback(self, name, **kwargs):        # redirect to login page if user doesn't have access        return redirect(url_for('myuser.login', next=request.url))

這樣只有Tom登錄之后才能看見(jiàn)后臺(tái)管理頁(yè)面:

 

五 flask-restful

快速構(gòu)建restApi,還是很方便的,其實(shí)就是把一個(gè)url的增傷改查寫(xiě)到一個(gè)類里面:

新建api類:

# restful 構(gòu)建apifrom models import User, db# 返回格式resource_fields = {    'id': fields.Integer,    'name': fields.String,    'age': fields.String,    'write_time': fields.String}class RestUser(Resource):    # 格式化返回結(jié)果,envelope 數(shù)據(jù)顯示名字    @marshal_with(resource_fields, envelope="user")    def get(self, id):        return User.query.filter_by(id=id).first(), 200    def post(self, name):        # 解析參數(shù)        parser = reqparse.RequestParser()        # 添加參數(shù),校驗(yàn)等,help: 校驗(yàn)不通過(guò)時(shí)展示自定義信息, location 可指定參數(shù)解析位置        parser.add_argument('age', type=int, required=True,                            help='年齡必須是整數(shù),且不為空', location='form',                            dest='age_alis')  # dest 使用別名存儲(chǔ)參數(shù),原來(lái)參數(shù)名key無(wú)法獲取        args = parser.parse_args()        # age = request.form.get('age')        user = User(name=name, age=args['age_alis'])        db.session.add(user)        db.session.commit()        # 繼承父類參數(shù)        parser_copy = parser.copy()        # 覆蓋或者刪除        parser_copy.replace_argument('age', type=int, required=True)        parser_copy.remove_argument('age')        return "success"    def delete(self, id):        user = User.query.filter_by(id=id).first()        db.session.add(user)        return "ok"

配置:

mail.init_app(app)# 注冊(cè)restful apiapi = Api(app)api.add_resource(RestUser, '/rest/<int:id>', '/rest/<name>')  # 可使用多個(gè)url訪問(wèn)接口

 

六 flask-admin

Flask提供了一個(gè)擴(kuò)展模塊幫助我們快速搭建一個(gè)后臺(tái)管理系統(tǒng),這個(gè)模塊就是--Flask-Admin

這個(gè)可以提供所有model數(shù)據(jù)的增刪改查,而且非常靈活支持?jǐn)U展,比如禁用刪除,只顯示某一列等等:

配置:

# 繼承ModelView,實(shí)現(xiàn)一些自定義擴(kuò)展from models import Userclass MyModelView(ModelView):
# 這里可以定制權(quán)限管理 can_delete = True can_create = False # 是否能創(chuàng)建 # Override displayed fields column_list = ('name', 'age') # 顯示的屬性 # 重寫(xiě)方法實(shí)現(xiàn)權(quán)限控制 def is_accessible(self): print(current_user.name) # 獲取login的當(dāng)前用戶 if current_user.is_authenticated and current_user.name == "Tom": return True return False # 訪問(wèn)頁(yè)面沒(méi)有權(quán)限時(shí)回調(diào)函數(shù),可跳轉(zhuǎn)登錄 def inaccessible_callback(self, name, **kwargs): # redirect to login page if user doesn't have access return redirect(url_for('myuser.login', next=request.url))

 

# 初始化admin后臺(tái)管理admin = Admin(app, name='MyWebSite', template_mode='bootstrap3')# 注冊(cè)模型用來(lái)管理,可自定義url,避免沖突(此處也使用藍(lán)圖,名字默認(rèn)使用model的小寫(xiě)名字,名字不能與藍(lán)圖名字沖突)admin.add_view(MyModelView(models.User, db.session, name=u'用戶管理', url='user/manage'))admin.add_view(UserView(name='自定義視圖'))

定制視圖(把某些頁(yè)面放在后臺(tái)管理上):

# 繼承BaseView進(jìn)行視圖頁(yè)面定制class UserView(BaseView):    # 使用expose進(jìn)行路由,每個(gè)視圖必須有一個(gè) '/' 函數(shù),否則報(bào)錯(cuò)    @expose('/')    def index(self):        return self.render('boot.html')    @expose('/user_manager')    def user_manager(self):        return self.render('boot.html')

最終效果:

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
數(shù)據(jù)庫(kù)|Flask+Redis實(shí)現(xiàn)登錄權(quán)限管理
flask
別用md5存密碼,用這個(gè)。。。
從頭搭建一個(gè)flask鑒權(quán)系統(tǒng)之登陸
Flask 教程,第五部分:用戶登錄
第 57 天:Python 用戶登錄 Flask-Login
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服