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