pip install flask 安装flask运行环境
和Django类似,flask里面的模板也存放在templates文件夹下,用pycharm执行前,需要将其指定为模板文件并指定模板类型为jinja2
脚本代码为:
from flask import Flask,redirect,render_template,jsonify,send_file
app=Flask(__name__)
@app.route('/')
def index():
return redirect('/register')
@app.route('/register')
def register():
return render_template('reg.html')
@app.route('/js')
def jso():
dic={"name":'kevin'}
j=jsonify(dic)
return j
@app.route('/send')
def send():
return send_file('yun.jpg')
app.run(debug=True)
#启用调试模式 会自动热加载
默认获取请求数据的方式分为get和post
flask中的request对象属于全局变量,是直接导入的
post请求的数据可以通过form.get()指定的键去取值 request.form.get('username')
get请求的数据可以通过args.get()指定的键去获取值 request.args.get('username')
request.method() 获取当前的请求方式
request.form() 获取post请求中存放FormData的数据
request.args() 获去get请求中url的数据
request.urls() 获取完整的URL地址
request.path() 获取当前路由地址
request.host() 当前主机地址
request.json() 如果前端返回的数据请求头中Content-Type :application/json 则是json格式数据能直接获取到json格式
request.data() 如果前端返回的数据请求头中Content-Type :application/data 则是无法识别的数据格式,全部数据将按byte存放
关于Jinja2
{{ }} 引用变量 执行函数
{% %} 逻辑代码
| safe Markup 安全标签字符串
@app.template_global()
@app.template_filter()
{% macro create_input(na,ty) %}
{{ na }} : <input type="{{ ty }}" name="{{ na }}">
{% endmacro %}
{{ create_input("username","text") }}
flask装饰器实现简单的登陆认证(session):
from flask import Flask,render_template,request,session,redirect
from functools import wraps
#装饰器默认链式调用,同一装饰器作用不同视图会抛异常视图函数被覆盖
#用装饰器工具类的wraps来修正
app=Flask(__name__)
app.secret_key='luckily' #一串用于加密的字符串序列化与反序列化session的值
#检查是否登录的装饰器
def wai(func):
@wraps(func)
def nei(*args,**kwargs):
if session.get('user'): #session有值,则正常执行视图函数
ret=func(*args,**kwargs)
return ret
else: #未登录则强制重定向
return redirect('/login')
return nei
@app.route('/login',methods=['GET','POST']) # methods 可以允许通过的请求 参数为列表或元组
def login():
if request.method=='GET':
return render_template('login.html')
# post方法执行相关操作
user=request.form.get('username')
pwd=request.form.get('password')
if user=='lisa'and pwd=='12345':
session['user']=user
return 'OK'
else:
return '用户名或者密码错误'
@app.route('/index')
@wai
def index():
return render_template('index.html')
@app.route('/about')
@wai
def about():
return render_template('about.html')
app.run(debug=True)
#开启调试模式 默认热加载编辑器
flask这个奇葩居然把session放在了本地浏览器的cookie中。是认真的么???