1、jinja2簡單介紹html
Jinja2是Python裏一個被普遍應用的模版引擎,他的設計思想來源於Django的模板引擎,並擴展了其語法和一系列強大的功能。其中最顯著的一個是增長了沙箱執行功能和可選的自動轉義功能,這對大多應用的安全性來講是很是重要的。python
他基於unicode並能在python2.4以後的版本運行,包括python3。
web
2、Django和Flask的比較json
Django web框架:flask
優勢:大而全,Forms組件,Admin,model ......
缺點:浪費資源,運行一個小型程序也會啓動不少組件安全
Flask Web框架:
優勢:短小精悍,session(存放在cookies裏,f12能夠查看),三方組件強大
缺點:運行穩定性較差cookie
3、啓動一個flask項目session
三行代碼:=》沒有頁面,可是已經啓動了
from flask import Flask
app = Flask(__name__)
app.run(debug = True) 裏面的參數debug=True 是設置修改參數後項目自動從新啓動。 debug級別比較低,修改一個字符項目都會從新啓動。app
六行視圖函數
@app.route("/index") # 路由
def index(): # 視圖函數
return "Hello OldBoy EDU" # Django HttpResponse框架
補充個小知識點:關於建立flask項目的模板文件建立
新建一個模板文件,右擊MARK_directory as ==》選擇template folder==》上方選擇template language==》選擇jinja2,下方選擇html
4、返回給頁面的三種形式
response三劍客:
① 至關於httpresponse: return "hello"
jsonify({k:v}) 直接轉換成json字符串 取代json.dumps() 注意:這裏是jsonify,不是jsonfy,有個i。
render_template :
先導入再 return
templates 是模板的默認存放路徑
redirect:
先導入再 return redirect("/login")
send_file():
先導入再 return send_file(打開文件並返回) 括號裏參數是文件路徑
5、request請求的一些數據獲取
request:
args 獲取url地址當中的參數 好比request.args.get('id')獲取id的值
form POST請求體中的FormData中的數據
values 獲取全部參數(url,formdata)
request.data content-type:jin b"{username:jinwangba}"
request.json content-type:application/json 將數據序列化字典中
request.files 獲取Formdata中的文件
jwbdf = request.files["jinwangbadefile"]
jwbdf.save(jwbdf.filename)
屬性類的:
method 請求方式
url 完整地址
host 前半段兒 http://111.111.111.111:5000/
path 後半段兒 /login
6、模板語言:
Jinja2
{{ }} 非邏輯代碼
{% %} 邏輯代碼 又稱爲標籤語法,函數,if,for均可以寫入
路由:
methods=["POST","GET"]
endpoint="反向url地址"
url_for("反向url地址")
defaults={"nid":10}
動態路由參數/index/<int:arg>
url_for("endpoint",arg=123)
Flask的配置
1.Flask實例化配置
static_folder = 'static', # 靜態文件目錄的路徑 默認當前項目中的static目錄
static_url_path = None, # 靜態文件目錄的url路徑 默認不寫是與static_folder同名,遠程靜態文件時複用 訪問url的時候須要填寫的路徑
template_folder = 'templates' # template模板目錄, 默認當前項目中的 templates 目錄
2.Flask對象配置
'SECRET_KEY': None, # 以前遇到過,在啓用Session的時候,必定要有它
'SESSION_COOKIE_NAME': 'session', # 在cookies中存放session加密字符串的名字
'JSONIFY_MIMETYPE': 'application/json'
class FlaskConfigDebug(object):
DEBUG = True 和app.run(debug=True)是同樣的
SECRET_KEY = "DragonFire"
class FlaskConfigTesting(object):
TESTING = True
SECRET_KEY = "DragonFire"
app.config.from_object(FlaskConfigDebug)
Flask藍圖(Blueprint)
藍圖就是另外一種形式的Flask實例
detail_blueprint = Blueprint("serv",__name__, template_folder="serv_temp",
static_folder="serv_static",
static_url_path="/serv_static",url_prefix="/servs")
Flask特殊裝飾
@app.template_folder() 類偏函數的方法
@app.template_global() 全局函數
@app.errorhandler(405)
def my_405(args)
@app.before_request
def be1():
return None 是繼續
return not None 是中斷
@app.after_request
def af1(res):
return res
# be1 - be2 - af2 - af1
# be1 - af2 - af1
Flask中的session
app.config["SECRET_KEY"] = "asdfasdfasdf"
Flask中的 CBV
class Login(views.MethodView):
def get(self):
return render_template("template.html")
def post(self):
username = request.form.get("username")
password = request.form.get("password")
if username == "yinwangba" and password == "jinwangba":
return "登陸成功"
return render_template("template.html",msg="登陸失敗滾吧")
app.add_url_rule("/login",endpoint=None,view_func=Login.as_view(name="login"))
本身練習: 基於session + Blueprint 實現一個學生管理 增刪改查分別是四個藍圖