博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask
阅读量:5875 次
发布时间:2019-06-19

本文共 4118 字,大约阅读时间需要 13 分钟。

Flask

Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。

pip3 install flask

django与flask都是基于wsgi,但是django是wsgiref,flask是werkzeug

from werkzeug.wrappers import Request,Responsefrom werkzeug.serving import run_simple@Request.applicationdef hello(request):    return Response('Hello World!')if __name__ == '__main__':    # 请求一旦进来,执行第三个参数   参数()    run_simple('localhost',4000,hello)

扩展

加括号 类加括号,走init对象,走call函数

基本使用

from flask import Flaskapp = Flask(__name__)  # 一个flask的类对象@app.route('/index')def index():    return 'Hello World'if __name__ =='__main__':    app.run()   # ---> run_simple(host,post,app)

问题:run_simple与app.run()之间的联系

app.run(),会将我们创建的app对象当做第一个参数,传值.源码里面:        from werkzeug.serving import run_simple        try:            run_simple(host, port, self, **options)        finally:            self._got_first_request = False所以app.run()  本质也是调用了 run_simple, **options就是我们创建的app对象 app请求进来,既是对象加()  执行call 方法 ---> 入口

flask没有自己的模板渲染---> jinja2

flask的文件名确定

由app = Flask(__name__)进源码    def __init__(        self,        import_name,        static_url_path=None,        static_folder='static',        static_host=None,        host_matching=False,        subdomain_matching=False,        template_folder='templates',        instance_path=None,        instance_relative_config=False,        root_path=None    ):

添加请求方式

@app.route('/login',methods=['GET','POST'])

取数据

视图函数默认没有参数,flask的一大特点:请求相关数据不是用参数传递,请求进来数据会将放在空调(request), request.args  # 获取GET传来的值 request.form  # 获取POST传过来的值

返回提醒信息加**

方式一:return render_template('login.html',msg = '用户名或密码错误') 方式二:return render_template('login.html',**{'msg':'用户名或密码错误'})

将信息放入session

session['user_info'] = user默认放到浏览器的cookie需加个签名(加密)不加会报错
app.secret_key = 'zxvbmfas'   # 自定制加盐 注意:用户刚进来session里面没有值,但会为其生成一个字典,session---> 字典,   字典先序列化为字符串,再加密,再写到cookie 所有从session取值可以通过get

app = Flask(__name__)app.secret_key = 'zxvbmfas'   # 自定制加盐

用户登录及显示用户具体信息

from flask import Flask,render_template,request,redirect,sessionapp = Flask(__name__)app.secret_key = 'zxvbmfas'   # 自定制加盐app.debug = True  # 自动重启USER_DICT = {    '1':{
'name':'vzh','age':18}, '2':{
'name':'lishi','age':28}, '3':{
'name':'jassin','age':38},}@app.route('/login',methods=['GET','POST'])def login(): if request.method == 'GET': return render_template('login.html') user = request.form.get('user') pwd = request.form.get('pwd') if user == 'jassin' and pwd == '123': # 用户信息放入session session['user_info'] = user return redirect('/index') else: return render_template('login.html',msg = '用户名或密码错误') # return render_template('login.html',**{'msg':'用户名或密码错误'})@app.route('/index')def index(): user_info = session.get('user_info') if not user_info: return redirect('/login') # 展示列表信息 return render_template('index.html',user_dict = USER_DICT)@app.route('/detail')def detail(): user_info = session.get('user_info') if not user_info: return redirect('/login') # 获取get请求的uid uid = request.args.get('uid') info = USER_DICT.get(uid) print('用户信息',info) # 展示列表信息 return render_template('detail.html', info=info)@app.route('/logout')def logout(): del session['user_info'] return redirect('/login')if __name__ == '__main__': app.run()
app.py
    
Title
    {
    % for k,v in user_dict.items() %}
  • {
    {v.name}} 查看详细
  • {
    % endfor %}
index
    
用户登录

登录

{
{ msg }}
login
    
Title

详细信息页面

用户名:{
{info.name}}
年龄:{
{info.age}}
detail.html

 

转载于:https://www.cnblogs.com/jassin-du/p/9100553.html

你可能感兴趣的文章
PHP之打开文件
查看>>
iOS - OC SQLite 数据库存储
查看>>
PHP-mysqllib和mysqlnd
查看>>
Redis常用命令
查看>>
NeHe OpenGL教程 第三十五课:播放AVI
查看>>
Linux下ping命令、traceroute命令、tracert命令的使用
查看>>
js replace,正则截取字符串内容
查看>>
socket
查看>>
Highcharts使用表格数据绘制图表
查看>>
Thinkphp5笔记三:创建基类
查看>>
LNMP之编译安装PHP出现的问题
查看>>
hdu5373
查看>>
4.单链表的创建和建立
查看>>
testng生成报告 testng-xslt 美化测试报告
查看>>
Android 好看的搜索界面,大赞Animation
查看>>
查询反模式 - GroupBy、HAVING的理解
查看>>
[转]动态加载javascript
查看>>
Qt5中运行后台网络读取线程与主UI线程互交
查看>>
CAB归档文件提取工具cabextract
查看>>
Leanote 二进制版详细安装教程 Windows
查看>>