flask之jinja2模板语言

一、jinja2简单介绍

Jinja2是Python里一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能,这对大多应用的安全性来说是非常重要的。

他基于unicode并能在python2.4之后的版本运行,包括python3。

 

二、Django和Flask的比较

Django web框架:

优点:大而全,Forms组件,Admin,model ......
缺点:浪费资源,运行一个小型程序也会启动很多组件

Flask Web框架:
优点:短小精悍,session(存放在cookies里,f12可以查看),三方组件强大
缺点:运行稳定性较差

 

三、启动一个flask项目

三行代码:=》没有页面,但是已经启动了
  from flask import Flask
  app = Flask(__name__)
  app.run(debug = True)   里面的参数debug=True 是设置修改参数后项目自动重新启动。 debug级别比较低,修改一个字符项目都会重新启动。

六行视图函数
@app.route("/index") # 路由
def index(): # 视图函数
return "Hello OldBoy EDU" # Django HttpResponse

 

补充个小知识点:关于创建flask项目的模板文件创建

  新建一个模板文件,右击MARK_directory as ==》选择template folder==》上方选择template language==》选择jinja2,下方选择html

 

四、返回给页面的三种形式

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(打开文件并返回)  括号里参数是文件路径

 

五、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

 

六、模板语言:
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 实现一个学生管理 增删改查分别是四个蓝图

 

posted @ 2018-10-29 21:34  Roc_Atlantis  阅读(529)  评论(0编辑  收藏  举报