array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Flask初识 - 爱码网

Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。

一、安装Flask模块

pip install flask

二、运行第一个Flask程序

打开一个Python文件,输入下面的内容并运行该文件。然后访问localhost:5000/index,我们应当可以看到浏览器上输出了Hello World

Flask初识

from flask import Flask

app = Flask(__name__)


@app.route('/index')
def index():
    return 'Hello World'


if __name__ == '__main__':
    app.run()

 

三、调试模式

Flask内置了调试模式,可以自动重载代码并显示调试信息。这需要我们开启调试模式:FLASK_DEBUG=1,然后再次运行程序,会看到有这样的输出。这时候如果再次修改代码,会发现这次Flask会自动重启。

* Restarting with stat

* Debugger is active!

* Debugger PIN: 157-063-180

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

 

四、Flask快速使用示例:用户登录

Flask初识

app.py:

from flask import Flask, render_template, request, redirect, session

app = Flask(__name__)
app.secret_key = '1121'   # 对session进行加密

USER_DICT = {
    '1': {'name': '大军', 'age': 18},
    '2': {'name': '大志', 'age': 25},
    '3': {'name': '梅凯', 'age': 10},
    '4': {'name': '院长', 'age': 69}
}


@app.route('/login', methods=['GET', 'POST'])
def index():
    if request.method == 'GET':
        return render_template('login.html')

# request.form获取POST传过来的数据 usr = request.form.get('usr') pwd = request.form.get('pwd') if usr == 'ZGS' and pwd == '1121': # 用户信息放入session session['usr_info'] = usr return redirect('/home') else: return render_template('login.html', msg='用户名或密码错误') # return render_template('login.html', **{'msg:'用户名或密码错误'}) @app.route('/home') def home(): usr_info = session.get('usr_info') if not usr_info: return redirect('/login') return render_template('index.html', usr_dict=USER_DICT) @app.route('/logout') def logout(): del session['usr_info'] return redirect('/login') @app.route('/detail') def detail(): usr_info = session.get('usr_info') if not usr_info: return redirect('/login') uid = request.args.get('uid') info = USER_DICT.get(uid) return render_template('detail.html', info=info) if __name__ == '__main__': app.run()

login.html:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>休息系统,用户登录</title>
</head>
<body>
    <h1>登录</h1>
    <form method="post">
        <input type="text" name="usr">
        <input type="password" name="pwd">
        <input type="submit" value="提交"> {{msg}}
    </form>
</body>
</html>

index.html:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>首页</title>
</head>
<body>
    <ul>
        {% for k,v in usr_dict.items()%}
            <li> {{v.name}} <a href="/detail?uid={{k}}">查看详细</a></li>
        {% endfor %}
    </ul>
</body>
</html>

detail.html:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>详细信息</title>
</head>
<body>
    <h1>详细信息</h1>
    <div>{{info.name}}</div>
    <div>{{info.age}}</div>
</body>
</html>

 

页面效果:

Flask初识

输入用户名密码,点击登录:

Flask初识

点击查看详情:

Flask初识

 

五、各参数解释

1、路由:

路由通过使用Flask的app.route装饰器来设置

2、URL:

在Web程序中常常需要获取某个页面的URL,在Flask中需要使用url_for('方法名')来构造对应方法的URL

3、HTTP方法:

需要处理具体的HTTP方法,在Flask中使用route装饰器的method参数设置

@app.route('/login', methods=['GET', 'POST'])
def index():
    if request.method == 'GET':
        return render_template('login.html')

4、静态文件:

Web程序中常常需要处理静态文件,在Flask中需要使用url_for函数并指定static端点名和文件名。在下面的例子中,实际的文件应放在static/文件夹下。

url_for('static', filename='style.css')

5、生成模板

Flask默认使用Jinja2作为模板,模板文件需要放在templates文件夹下。使用 Jinja 模板,只需要使用render_template函数并传入模板文件名和参数名。

from flask import Flask, render_template, request, redirect, session
app = Flask(__name__)

USER_DICT = {
    '1': {'name': '大军', 'age': 18},
    '2': {'name': '大志', 'age': 25},
    '3': {'name': '梅凯', 'age': 10},
    '4': {'name': '院长', 'age': 69}
}


@app.route('/home')
def home():
    usr_info = session.get('usr_info')
    if not usr_info:
        return redirect('/login')
    return render_template('index.html', usr_dict=USER_DICT)

相应模板:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>首页</title>
</head>
<body>
    <ul>
        {% for k,v in usr_dict.items()%}
            <li> {{v.name}} <a href="/detail?uid={{k}}">查看详细</a></li>
        {% endfor %}
    </ul>
</body>
</html>

页面访问:

Flask初识

 

6、Request 对象

Request 对象是一个全局对象,利用它的属性和方法,我们可以方便的获取从页面传递过来的参数。

method属性会返回HTTP方法的类似,例如post和get。

form属性是一个字典,如果数据是POST类型的表单,就可以从form属性中获取:request.form.get('usr')。如果数据是由GET方法传送过来的,可以使用args属性获取:request.args.get(uid)

 

相关文章: