#转载请留言联系

Flask 是一个 Python 实现的 Web 开发微框架。

1.搭建Flask开发环境

在你开发项目的时候,你拥有的项目越多,同时使用不同版本的 Python 工作的可能性也就越大,或者起码需要不同版本的 Python 库。悲惨现实是:经常会有库破坏向后兼容性。所以我们需要在虚拟环境下进行 flask 开发。这时候就要用到 virtualenv ! virtualenv 可以为每个不同项目提供一份 Python 安装。它并没有真正安装多个 Python 副本,但是它确实提供了一种巧妙的方式来让各项目环境保持独立。

在 virtualenv 中,开发环境是唯一的,只存在虚拟环境中,但是我们操作的文件都是系统中的,并不是独立的。注意和虚拟机区分开来。

  • 安装虚拟环境的命令 :

sudo pip3 install virtualenv

sudo pip3 install virtualenvwrapper #这是管理virtual的工具

安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:

  • 创建目录用来存放虚拟环境

mkdir ~/.virtualenvs

  • 打开~/.bashrc文件,并添加如下:

export WORKON_HOME=~/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

  • 导入

source ~/.bashrc

  • 创建虚拟环境

python2:mkvirtualenv 虚拟环境名字

python3:mkvirtualenv -p python3 虚拟环境名字

  • 查看虚拟环境

workon +两次Tab键

  • 进入虚拟环境

workon 虚拟环境名字

  • 退出虚拟环境

deactivate

  • 删除虚拟环境

rmvirtualenv 虚拟环境名字

搭建完毕后可以在pycharm中选择 .virtualenv 文件夹里面的虚拟环境文件夹的python来作为解析器。

注意:在虚拟环境中安装扩展包的时候,不要使用sudo,使用了sudo则表示给真实电脑中安装扩展包了。

2.使用flask写一个最简单的web服务器

from flask import Flask

app=Flask(__name__)    #Flask函数接收一个参数__name__,它会指向程序所在的包

@app.route("/")    #装饰器的作用是将路由映射到视图函数 index
def index():
return "hey,gril" if __name__ == '__main__':
app.run() #Flask应用程序实例的 run 方法启动 WEB 服务器

3.flask初始化参数与加载配置

  • 初始化参数
 app=Flask(__name__,
static_folder='static',
static_url_path='/hide',
template_folder='templates')

static_url_path主要用于改变url的path的,静态文件放在static下面,所以正常情况url是static/filename ,但是可以通过static_url_path来改变这个url。

static_folder主要是用来改变url的目录的,默认是static,可以通过这个变量来改变静态文件目录。

第2,3行的作用综合是这样:用户输入url时,xxx/hide/123.jpg。实际上在服务器上的路径是./static/123.jpg。

template_folder是用来设置html模板文件的目录。

  • 加载配置

加载配置常用的有两种方式:

(1)在配置对象中加载(最常用)

from flask import Flask

app=Flask(__name__)

class Setting(object):
DEBUG=True app.config.from_object(Setting) @app.route("/")
def index():
return "" if __name__ == '__main__':
app.run()

(2)在配置文件中加载

from flask import Flask

app=Flask(__name__)

app.config.from_pyfile("config.ini")    #新建一个文件,名为config.ini。内容就是设置

@app.route("/chichung")
def index():
return "chichung" if __name__ == '__main__':
app.run()

拓展:

debug只能在开发过程中开启,如果项目上线了,则必须关闭debug模式,否则容易遭到网络攻击。
作用:
1. 在开发过程中,可以帮助我们快速定位代码错误位置,方便调试2. 在开发过程中,在项目代码修改以后自动重启。

4.给路由传参

from flask import Flask

app=Flask(__name__)

@app.route("/<int:username>")
def usr_info(username):
return "你的用户名是%s"%username #这里是易错点,返回值一定要是字符串类型 if __name__ == '__main__':
app.run(debug=True)

当用户输入xxx/123的时候,网页显示:你的用户名是123。

5.指定请求方式

from flask import Flask,request
app=Flask(__name__) @app.route("/",methods=["get"]) #指定只接受get请求方式的请求
def index():
return “你好呀” if __name__ == '__main__':
app.run()

只接受get请求方式的请求,如果是其他请求方式,会返回 405 Method Not Allowed 错误。

6.查询请求的数据

当用户用 get 或者 post 方式向服务器提交信息时,我们应该怎么获取呢?

  • request:flask中代表当前请求的request对象
  • 作用:在视图函数中取出本次请求数据
  • 导入from flask import request

常用的属性如下:

属性 说明 类型
data 记录请求的数据,并转换为字符串 *
form 记录请求中的表单数据 MultiDict
args 记录请求中的查询参数 MultiDict
cookies 记录请求中的cookie信息 Dict
headers 记录请求中的报文头 EnvironHeaders
method 记录请求使用的HTTP方法 GET/POST
url 记录请求的URL地址 string
files 记录请求上传的文件 *

示例(1):获取get请求的数据

from flask import Flask,request
app=Flask(__name__) @app.route("/",methods=["get"])
def index():
return "你的用户名是"+request.args.get("username") if __name__ == '__main__':
app.run()

示例(2):获取post请求的数据

from flask import Flask,request

app=Flask(__name__)

@app.route("/",methods=["post"])
def index():
print(request.form)
print(request.form.get("name"))
return "hello" if __name__ == '__main__':
app.run()

提示:要实验的可以用postman。

7.正则匹配路由

在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,根据自己的规则去限定请求参数再进行访问。

具体实现步骤为:

  • 导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录
  • 自定义转换器:自定义类继承于转换器基类
  • 添加转换器到默认的转换器字典中
  • 使用自定义转换器实现自定义匹配规则

系统自带的转换器如下:

DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}

正则的转换器写法如下:(可作为模板直接调用)

from werkzeug.routing import BaseConverter
# 自定义正则转换器
class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
# 将接受的第1个参数当作匹配规则进行保存
self.regex = args[0] # 将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: re
app.url_map.converters['re'] = RegexConverter

示例:

from flask import Flask
from werkzeug.routing import BaseConverter
app=Flask(__name__) class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
self.regex = args[0]
app.url_map.converters['re'] = RegexConverter @app.route("/<re('\d{3}'):id>")
def index(id):
return "你输入的网址格式为xxx.xxx.xxx.xxx/%s(三个数字),我说对了吧"%id if __name__ == '__main__':
app.run() 

flask框架基本使用(1)(基本框架搭建与请求参数接收)的更多相关文章

  1. 012-Spring Boot web【一】web项目搭建、请求参数、RestController、使用jsp、freemarker,web容器tomcat和jetty

    一.项目搭建 同:http://www.cnblogs.com/bjlhx/p/8324971.html 1)新建maven项目→使用默认配置即可 定义好项目名称等 2)修改jdk版本 <pro ...

  2. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--参数自动映射篇(6/8)

    文章目录 前情概要 路由.action的扫描.发现.注册搞定之后,后来我发现在我们的action里面获取参数往往都是通过request对象来一个一个获取.同样的一行代码我们不厌其烦的重复写了无数次.遂 ...

  3. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--目录(8/8 完结)

    为什么要做这个 在使用nodejs开发过程中,总是发现需要做很多重复性的体力劳动,且因为自身是服务端程序员出身,感觉有一些服务端好的东西其实可以在nodejs上得到应用并能提高一些开发工作效率. 本系 ...

  4. Flask框架(一):介绍与环境搭建

    1.Flask介绍 Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核, ...

  5. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  6. ASP.NET MVC搭建项目后台UI框架—1、后台主框架

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  7. SSH框架整合项目(一)——搭建平台和引入依赖

    前言:这个项目是我的第一个实验性项目,最初的立意是制作一个个性化的BBS.由于BBS能够综合大部分功能,因此作为练手的项目来说再好不过.从写第一行代码到完成测试版大概历时2周.中间遇到了不少以前在学习 ...

  8. springMVC,spring,mybatis全注解搭建框架--第一步,让框架跑起来

    自己从事java开发工作也有一年多了,自己却没有亲手搭建一个完整的框架.于是今天自己动手搭建一个,过程中遇到一些问题,倒腾了大半天终于搞定了. 现在给大家分享一下过程,自己也记录下来,以后学习参考使用 ...

  9. 定时任务框架Quartz-(一)Quartz入门与Demo搭建

    注:本文来源于:是Guava不是瓜娃  <定时任务框架Quartz-(一)Quartz入门与Demo搭建> 一.什么是Quartz 什么是Quartz? Quartz是OpenSympho ...

随机推荐

  1. Spring核心技术(十五)——BeanFactory

    BeanFactory是Spring IoC功能的潜在基础,但是现在BeanFactory一般仅仅用于直接集成第三方的框架,对于大多数的Spring用户来说,BeanFactory已经算是一个历史了. ...

  2. Android ANR详解

    如何避免KeyDispatchTimeout 1:UI线程尽量只做跟UI相关的工作 2:耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理 3:尽量用 ...

  3. 亲手搭建一个基于Asp.Net WebApi的项目基础框架2

    本篇目的:封装一些抽象类 1::封装日志相关类 2:封装一个Service操作类 3:封装缓存操作类 4:封装其他一些常用Helper 1.1在Framework项目里面建立好相关操作类文件夹,以便于 ...

  4. java.sql.SQLException: Field 'id' doesn't have a default value异常

    在做mybatis插入的时候报了这个错误,百度了下,貌似是因为这个健没有设置值且不是自增类型的. java.sql.SQLException: Field 'id' doesn't have a de ...

  5. Python 两种方式实现斐波那契数列

    斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946 ...

  6. 前端初学者——初探Modernizr.js Modernizr.js笔记

    什么是Modernizr? Modernizr 是一个用来检测浏览器功能支持情况的 JavaScript 库. 目前,通过检验浏览器对一系列测试的处理情况,Modernizr 可以检测18项 CSS3 ...

  7. 验证表单的js代码段

     JS常用功能 转载自:http://blog.csdn.net/kalision/article/details/12516103 引用js文件: <script src="js/d ...

  8. 【志银】php5.6-Apache2.4-mysql5.6环境配置(win7_64位)

    ----------------------------------------------------- ★软件工具:(下载时注意下载相应版本,不同版本安装细节可能会有差异!!) 1>http ...

  9. JS正则表达式 简单应用

    知识点: 先生成一个正则规则的对象,使用test()对传入的字符串进行验证,返回布尔类型 代码: <!doctype html><html><head> <m ...

  10. 研华 FWA-3231 单路E3平台

    研华 FWA-3231 单路E3平台 服务器主板上芯片组与处理器的适配参考