Flask

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。

安装

Flask 依赖两个外部库, Werkzeug和 Jinja2。Werkzeug 是一个 WSGI 工具集,它是 web 应用程序和用于开发和部署的服务器之间的标准接口。Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能,这对大多应用的安全性来说是非常重要的。

你首先需要 Python 2.6 或更高的版本,所以请确认有一个最新的 Python 2.x 安装。对于在 Python 3 中使用 Flask,请参看 Python 3 Notes。

Pycharm

Pycharm带有Flask框架项目模版。

  • 创建Flask项目首先输入你的项目名称。
  • Create VirtualEnv创建一个虚拟环境。Virtualenv 能够允许多个不同版本的 Python 安装,每一个服务于各自的项目。 它实际上并没有安装独立的 Python 副本,只是提供了一种方式使得环境保持独立。

 #一个最小的应用看起来像这样:

 from flask import Flask
app = Flask(__name__) @app.route('/')
def hello_world():
return 'Hello World!' if __name__ == '__main__':
app.run()
把它保存成 hello.py (或者类似的文件),然后用 Python 解释器运行它。确保你的应用不叫做 flask.py, 因为这会与 Flask 本身冲突。
  1. 首先我们导入了类 Flask 。这个类的实例化将会是我们的 WSGI 应用。第一个参数是应用模块的名称。 如果你使用的是单一的模块(就如本例),第一个参数应该使用 __name__。因为取决于如果它以单独应用启动或作为模块导入, 名称将会不同 ( '__main__' 对应于实际导入的名称)。获取更多的信息,请阅读 Flask 的文档。
  2. 接着,我们创建一个该类的实例。我们传递给它模块或包的名称。这样 Flask 才会知道去哪里寻找模板、静态文件等等。
  3. 我们使用装饰器 route() 告诉 Flask 哪个 URL 才能触发我们的函数。
  4. 定义一个函数,该函数名也是用来给特定函数生成 URLs,并且返回我们想要显示在用户浏览器上的信息。
  5. 最后我们用函数 run() 启动本地服务器来运行我们的应用。if __name__ == '__main__': 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。
  6. 有两种方式开启调式模式。一种是在应用对象上设置标志位:

    app.debug = True
    app.run()

    或者作为 run 的一个参数传入:

    app.run(debug=True)

现在浏览 http://127.0.0.1:5000/,你会看到你的 Hello World 问候。

fabs

 # -*-coding:UTF-8-*-
from flask import Flask, render_template, request, redirect, url_for
from werkzeug.utils import secure_filename
from os import path
from converter import * app = Flask(__name__)
#自定义转换器的初始化
app.url_map.converters['regex'] = RegexConverter @app.route('/')
def hello_world():
return 'hello world' #路由名必须与函数名一致
@app.route('/services')
def services():
return 'services' # 路由的转换器系统提供了三种:int、float、path
# 正则表达式的转化器
@app.route('/<regex("[\d]{2,5}"):user_id>')
def user(user_id):
return 'hello %s' % user_id # 指向views的文件名
@app.route('/views')
def views():
return 'views' # 默认指向projects目录下的index.html
# 在浏览器输入projects也会默认转换为projects/
@app.route('/projects/')
def projects():
return render_template('index.html') @app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
print request.form['username']
#在?username的获取数据 使用args
# else:
# print request.args['username']
return render_template('login.html', method=request.method) @app.route('/upload', methods=['GET', 'POST'])
def upload():
"""
文件上传
"""
if request.method == 'POST':
f = request.files['file']
basepath = path.abspath(path.dirname(__file__))
# f.filename 获取的文件名是可以被篡改的,使用secure_filename更可靠一些
file_name = 'static/uploads/%s' % secure_filename(f.filename)
upload_path = path.join(basepath, file_name)
"""
#麦子学院flask入门中提到
# f.save(upload_path, secure_filename(f.filename))
但源码中该参数为int 可能版本不同
def save(self, dst, buffer_size=16384):
"""
f.save(upload_path)
return redirect(url_for('upload'))
return render_template('upload.html') if __name__ == '__main__':
# debug 实时调试
app.run(debug=True)

fabs.py

 # -*-coding:UTF-8-*-
from werkzeug.routing import BaseConverter class RegexConverter(BaseConverter):
def __init__(self, url_map, *items):
super(RegexConverter,self).__init__(url_map)
self.regex=items[0]

converter.py

templates

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>NewLife</title>
<!--使用添加的css样式
TODO url_for()的使用方法-->
<link rel="stylesheet" href="{{ url_for('static', filename='set.css') }}"/>
</head>
<body>
<h1>www</h1>
<input inputmode="title" >
{{ title }}
<nav>
<a href="{{ url_for('.services') }}">Services</a>
<a href="{{ url_for('.views') }}">Views</a>
</nav>
</body>
</html>

index.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<h1>HTTP 方法:{{ method }}</h1>
<form method="post">
<div>
<input type="text" placeholder="user name" name="username">
</div>
<div>
<input type="password" placeholder="user password" name="password">
</div>
<input type="submit">
</form>
</body>
</html>

login.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>文件上传示例</h1>
<!--上传必须加该属性,不然该form不做任何操作-->
<form action=""
method=post
enctype=multipart/form-data>
<p>
<input type="file" name="file">
<input type="submit" value="Upload">
</p>
</form> </body>
</html>

upload.html

static

 body {
color: #86989B;
} a, a:visited {
color: black;
}

set.css

pip

pip freeze 导出项目所需的包
可有重定向至文件中 pip freeze > filename.txt
执行pip一次全部安装了 pip install -r filename.txt backports-abc==0.4
certifi==2016.8.31
click==6.6
dominate==2.2.1
Flask==0.11.1
Flask-Bootstrap==3.3.5.6
flask-nav==0.4
Flask-Script==2.0.5
Flask-WTF==0.12
itsdangerous==0.24
Jinja2==2.8
livereload==2.3.2
Markdown==2.3.1
MarkupSafe==0.23
singledispatch==3.4.0.3
six==1.10.0
tornado==4.4.1
visitor==0.1.3
Werkzeug==0.11.11
wheel==0.24.0
WTForms==2.1

Jinja2

Flask 框架入门的更多相关文章

  1. Flask框架入门

    Flask-基本入门 简介 flask被称为微型框架,只提供了一个强健的核心,其他功能全部通过扩展库来实现:也就是说可以根据项目需要量身打造.他适合入门学习以及高手研究. 组成:WSGI.模板引擎(J ...

  2. Flask框架入门(一)

    Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核,其他几乎所有的功能都 ...

  3. Python的Flask框架入门-Ubuntu

    全文请见tuts code:An Introduction to Python's Flask Framework Flask是Python一个小而强大的web框架.学起来简单,用起来也容易,能够帮你 ...

  4. Python Flask框架入门

    序言 Flask封装功能不及Django完善,性能不及Tornado,但是Flask的第三方开源组件比丰富. 如果你是一个追求极简风格的完美主义者,那么Flask适合你. 资料

  5. Flask框架从入门到实战

    Flask简介: Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎.使用 BSD 授权. Flask也被称为 " ...

  6. Flask 入门一( flask 框架和 flask-script 库)

    Flask 入门一( flask 框架 和 flask-script 库) 一.Flask框架: 1.简介 Flask是一个非常小的Python Web框架,被称为微型框架:只提供了一个稳健的核心,其 ...

  7. Python之Flask框架项目Demo入门

    Python+Flask框架项目Demo入门 本例子用到了 Flask+蓝图+Flask-Login+SQLAlchemy+WTForms+PyMySQL相关架构 Flask Web框架介绍 Flas ...

  8. flask 框架快速入门

    flask 框架快速入门 搭建一个简易flask项目 首先使用 Pycharm创建flask项目 运行flask项目 1.使用Pycharm搭建flask项目 (如果Pycharm新建项目中未出现该图 ...

  9. Python 什么是flask框架?快速入门

    一:Python flask框架 前言 1.Python 面向对象的高级编程语言,以其语法简单.免费开源.免编译扩展性高,同时也可以嵌入到C/C++程序和丰富的第三方库,Python运用到大数据分析. ...

随机推荐

  1. Asp.net MVC的ViewData与ViewBag以及TemplateData的使用与区别

    ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从Asp.net MVC 1 就有了 ASP.NET MVC3 才有 基于Asp.net 3.5 fram ...

  2. 记录在linux下的wine生活

    记录在linux下的windows生活 本篇内容涉及QQ.微信.Office的安装配置 QQ: 到deepin下载轻聊版. 如果安装了crossover,那么将其中opt/cxoffice/suppo ...

  3. div+css:div中图片垂直居中

    div中图片垂直居中 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...

  4. python 常用内建模块(3) base64

    Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的 ...

  5. php验证身份证号码的正确性

    /********************php验证身份证号码是否正确函数*********************/function is_idcard( $id ) {   $id = strto ...

  6. windows7下Wamp安装php扩展imagick(转)

    ImageMagick是一套功能强大.稳定而且免费的工具集和开发包,可以用来读.写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等 ...

  7. Error configuring application listener of class。。。NoClassDefFoundError。。某Listener 之启动tomcat报错

    当你启动tomcat的时候如果报类似下面的错误: WARNING: [SetContextPropertiesRule]{Context} Setting property 'source' to ' ...

  8. MSSQL部分补丁的列表及下载地址(持续更新)

    整理了MSSQL部分补丁的列表及下载地址(截至2016-11-18),供参考下. Edition Version Date Published Download Link SQL Server 201 ...

  9. C# Async, Await and using statements

    Async, Await 是基于 .NEt 4.5架构的, 用于处理异步,防止死锁的方法的开始和结束, 提高程序的响应能力.比如: Application area           Support ...

  10. jQuery EasyUI Combobox 无法获取属性 options 的值: 对象为 null 或未定义

    错误的写法: $('#combobox1').combobox({ valueField: 'id', textField: 'text',data:[{id:1,text:'蚂蚁小羊'}]}); 正 ...