#Flask 安装依赖包及作用
- jinja2 模板语言 (flask依赖包)
- markupsafe 防止css攻击 (flask依赖包)
- werkzeug --wkz 类似于django中的wsgi,承载服务 (flask依赖包)
1.1Flask開始
# 三行启动
from flask import Flask
app = Flask(__name__)
app.run("0.0.0.0",9527) #监听地址,监听端口
1.2レスポンス
- リターン "文字列" - >のHttpResponse
- リターンrender_template(「htmlファイル」、変数=「文字列」) - >デフォルトの保存場所はremplatesで、リターンテンプレート依存パッケージmarkupsafe
- リターンリダイレクト(「/ログイン」) - >リダイレクト応答を追加-locationのヘッダー:URLアドレス、およびその後のジャンプ
- 特別レスポンス
- 返すsend_file(「ファイル名+ファイル名やファイルパス」) - >ファイルを開く、あなたは自動的に戻りファイルは、ファイルタイプは、Content-Type応答ヘッダに追加するかどうかを決定します。ファイルの種類
- appcation / JSON:>戻りJSON標準フォーマット文字列、コンテンツ型応答の投票に追加 - ({V K})jsonify返します
- フラスコ1.1.1バージョン、ダイレクトリターン辞書では、基本的にjsonifyランニング
- Flask1.1.1で辞書に直接返されることがあり、辞書には、コンテンツタイプにアプリケーション/ JSONを追加した後、フラスコのデフォルトの直列化を元に戻します
1.3フラスコリクエスト
- (request.POSTの類似Djnagoで)データを取得するにrequest.fromいるFormData
- to_dict()の辞書のようなタイプに、そしてあなたは、[キー]の値を取得することができ、[キー]、キーが存在しない場合、エラーがKeyError例外が発生します
- URL( `` request.GET``で同様Djnago)で取得したrequest.argsデータ
- 辞書のようなタイプにto_dict()、および[キー]値は、[キー]を得ることができ、キーが存在しない場合**、エラーがKeyError例外を発生
- request.filesはFomeアップロードファイルを取得します:
- request.json
- 要求がコンテンツタイプである場合:アプリケーション/ JSON、次にリクエストボディ内のデータはrequest.jsonにシリアライズされ、およびの形で辞書を格納します
- request.data
- 要求が現在のContent-TypeであるかいるFormDataフォームが含まれていない場合、リクエストボディに元のデータを保持し、「」ベースBのタイプです。ストレージ
- request.method#リクエストメソッド
- request.host#のホストビット:127.0.0.1:5000
- パラメータを含むrequest.urlの#完全なURL、
- request.path番号要求パス、ルーティングアドレス
- request.cookies#は、ブラウザがクッキーを要求もたらすために辞書を取得します。
- #要求ファイル、リターンがFileStorage、ファイルを保存.SAVEをrequest.files
- request.heads取得要求ヘッダ
1.4フラスコセッション
クライアントによるメカニズムの親権は、クライアントは、サーバのメモリに保存され、暗号化された文字列の束を保存しました
設定したセッション
1.在Flask中设置密钥 app.secret_key = "@#^%&*&@^&%^#*@" 或者: app.config['SECRET_KEY'] = "@#^%&*&@^&%^#*@" 2.设置session session["user"]="123" 3.获取session session.get('user') # 交由客户端保管机制 1.登陆成功后设置session,Flask根据密钥和要设置的session键值对经过位运算,生成session,保存到内存中,需要的话就通过get获取,不需要关闭时删除,并在浏览器中设置键值对--session:string 2.在发出请求时,根据浏览器中的--session:string和Flask中secret_key,反序列化就得到了session键值对
1.5フラスコルート
from flask import Flask
app = Flask(__name__)
@app.route('/',methods=("POST","GET"),endpoint='别名',defaults={"count":20} )
def home(count):
count = request.args.get('count',count) #指定页数就优先,如果没有取默认值
app.run()
ルール=「/」ときに最初のURL、
メソッド=リクエストメソッドをサポート[..、 "POST" を "GET"](クロスドメインオプション、削除、削除、更新を入れて、ポストの増加を照会を取得)
エンドポイントエイリアス*エイリアス同じプロジェクトを繰り返すことはできません、デフォルト値は、関数ビューの名前です。
Mapping,别名. 反向解析 url = url_for('别名')
strict_slashes = Trueを厳守ルート一致
defalutsのデフォルトパラメータ
redirect_to =「/」永久的なリダイレクト、どんなにURLにジャンプしますどのような「/」
- シナリオ:アドレスを交換する場合、新しいアドレスに元のアドレスジャンプをクリックしてください
#添加路由时不一定用装饰器,可以使用 app.add_url_rule(rule, # 路由地址 view_func #视图函数 )
1.6ダイナミックルーティングパラメータ
- あなたは正規ルートを解決分類問題を解決するために、ドキュメントへのアクセス、ページングすることができます
from flask import Flask
app = Flask(__name__)
@app.route('/home/<page>') #page默认类型是字符串接收
def home(page): # 需要传参接收
pass
@app.route('/home/<page>_<id>_<id2>') #默认类型是字符串接收
def home(page,id,id2): # 需要传参接收
pass
app.run()
1.7フラスコ初期設定##重要!
from flask import Flask
app = Flask(
__name__,
template_folder = 'templates', # 更改母版存放路径,默认值是templates ##重要!!!
static_folder = 'static', # 指定静态文件保存目录,默认值是static "家" ##重要!!!
static_url_path = "/static", # 静态文件访问路径,默认值是 /+static_folder "回家的路" ##重要!!!
)
#原理
@app.route('/<filename>', )
def func(filename):
filepath = os.path.join('img', filename) # img就是家
return send_file(filepath) # filepath就是访问路径
if __name__ == '__main__':
app.run()
1.8フラスコインスタンス構成
- 基本構成
from flask import Flask
app = Flask(
__name__,
template_folder = 'templates', # 更改母版存放路径,默认值是templates ##重要!!!
static_folder = 'static', # 指定静态文件保存目录,默认值是static "家" ##重要!!!
static_url_path = "/static", # 静态文件访问路径,默认值是 /+static_folder "回家的路" ##重要!!!
)
# 实例化配置
app.debug = True # 修改代码自动重启
app.secret_key = '$%^^$' #设置session值需要改密匙
app.session_cookie_name = 'session' # 设置的session名称 ,默认是session
app.permanent_session_lifetime= # session生命周期,以秒计时,默认31天
# 另外一种更改配置方式
app.config['DEBUG']= True # 这种方式速度更快
#app.config Flask配置
#app.defalut_config flask默认配置
if __name__ == '__main__':
app.run()
- コンフィギュレーションファイルの設定(重要!!!)、高速スイッチング動作モード
# settinigs.py文件代码
class DebugConfig(object):
"""线上开发环境"""
DEBUG = True
SECRET_KEY = "#$%^&*($#$%^&*%$#$%^&*^%$#$%"
PERMANENT_SESSION_LIFETIME = 3600
SESSION_COOKIE_NAME = "I am Not Session"
class TestConfig(object):
"""测试环境"""
TESTING = True
SECRET_KEY = hashlib.md5(f"{time.time()}#$%^&*($#$%^&*%$#$%^&*^%$#$%{time.time()}".encode("utf8")).hexdigest()
PERMANENT_SESSION_LIFETIME = 360000
SESSION_COOKIE_NAME = "#$%^&*($#$%^&*%$#$%^&*^%$#$%" # session名字
#配置生效
1.导入配置文件
from settings import DebugConfig,TestConfig
2.环境生效
app.config.from_object(DebugConfig) # 线上环境
app.config.from_object(TestConfig) # test环境,需要的时候只需要启用DebugConfig,TestConfig其中一条
1.9フラスコの青写真青写真
- 普通のフラスコの場合と同様の青写真は、フラスコのインスタンスで実行することができない、設定不在
青写真bp_users.pyファイルを作成し、名前を変更することができます
from flask import Blueprint bp = Blueprint('bp01', __name__,url_prefix='url前缀') # 'bp01'第一个参数是唯一标识,整个环境不能重复! url_prefix='url前缀',当存在多个蓝图url冲突时,在地址栏输入'url前缀',就可以访问指定的蓝图文件 @bp.route('/user',endpoint='user') def user(): return '我是蓝图函数01'
関係を構築
# 在项目的app.run文件中 from app01 import bp #导入蓝图 app.register_blueprint(bp) # 注册蓝图
指定されたパスへのアクセス
逆引きは青写真では、あなたが書い形式に注意を払う必要がある場合:
url = url_for('蓝图标识.装饰器别名')
1.10特別なデコレータ
类似于django中的中间件
- @ app.before_request
- ビュー要求機能に入る前に、処理を行うために実行
- ミドルウェアdganjoで同様の要求
- 要求Djangoのミドルウェアにおける法の実装として、
- @ app.after_request
- ビュー関数は、逆の実行を実行するためにした後、契約を作るために
- ジャンゴミドルウェアで同様の応答
- 違いは、Djangoのミドルウェアとのことです。どんなにafter_request限り、応答はすべての実行が逆になりますよう何、
- @ App.errorhandler(エラーコード)
- エラーリスナーのデコレータ
- エラーコードは、先頭にのみ4(リクエストエラー)または5(サーバーエラー)であります
- あなたは、エラー画面を再定義することができます
@app.before_request
def is_login():
"""
校验登录状态
:return:
"""
path = request.path
if path != '/login':
if not session.get('is_login'):
return redirect('/login')
return None
@app.errorhandler(404)
def error(error_msg): # 形参必须添加
"""
校验登录状态
:return:
"""
return '没找到页面'
1.11CBV
基本フォーマット
from flask import view,Flask app = Flask(__name__) class Login(views.MethodView): #继承MethodView,使类变成视图函数 def get(self,*args,**kwargs): pass def post(self,*args,**kwargs): pass app.add.url_rule('/login', endpoint='login', # 如果endpoint不定义的话名称就是view_func的name,必须唯一 view_func=Login.as_view(name='loginlogin'), # name就是就是view_func的名称 ) app.run()
2.サードパーティのコンポーネントフラスコ-セッション
SetDefault()辞書メソッド
dict.setdefault(key, default=None) #参数 key -- 查找的键值。 default -- 键不存在时,设置的默认键值。 #返回值 如果 key 在 字典中,返回对应的值。如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。
フラスコセッションインストールパッケージ
- app.session_interfaceデフォルトのセッション・インターフェースである、フラスコの使用は、セッションの保存場所とストレージメカニズムを選択session_interface。
from flask import Flask, request, session from flask_session import Session #导入Session from redis import Redis # 导入redis app = Flask(__name__) app.secret_key = '$%^&*%$' # flask_session使用pickle转化,密钥可以不使用 app.config['SESSION_TYPE'] = 'redis' # 设置session存放机制,,浏览器中存的就是session_id,session存在redis中 app.config['SESSION_REDIS'] = Redis(host='192.168.12.10', port=6379, db=10) Session(app) # 使普通sesson变成flask_session # app.session_interface #Flask利用app.session_interface 选择session存放位置和存放机制 @app.route('/set') def sets(): session['key'] = 'QWER' return 'set' @app.route('/get') def gets(): return session.get('key') app.run()