flask之jinja2模板語言

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 實現一個學生管理 增刪改查分別是四個藍圖

相關文章
相關標籤/搜索