#转载请留言联系

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. 6,MongoDB 之 Array Object 的特殊操作

    相比关系型数据库, Array [1,2,3,4,5] 和 Object { 'name':'DragonFire' } 是MongoDB 比较特殊的类型了 特殊在哪里呢?在他们的操作上又有什么需要注 ...

  2. SpringMVC集成RSA加密算法

    技术交流群: 233513714 本文介绍的是RSA加密算法+Spring Security在SpringMVC中的集成使用. Spring Security是什么? 引用: Spring Secur ...

  3. 三层还是DDD,ORM还是Ado.Net,何去何从?

    我本想把这个问题放到博问去,前几次有去博问问过之类的问题,无奈大神们可能都不屑回答别人的低级问题.所以放到随笔里,一方面把自己对ORM.架构的一些看法写下来抛砖引玉,另一方面最主要的是想寻求大神们指指 ...

  4. Activiti入门 -- 环境搭建和核心API简介

    相关文章: <史上最权威的Activiti框架学习指南> <Activiti入门 -- 轻松解读数据库> 本章内容,主要讲解Activiti框架环境的搭建,能够使用Activi ...

  5. 剑指Offer - 九度1384 - 二维数组中的查找

    剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...

  6. 《Cracking the Coding Interview》——第18章:难题——题目1

    2014-04-29 00:56 题目:不用算数运算,完成加法. 解法:那就位运算吧,用加法器的做法就可以了. 代码: // 18.1 add two numbers wihout using ari ...

  7. Pascal编写的蠕虫病毒,凌盟提供,Chaobs转载

    { Happy Birthday (c) 1998 WoRmI don't take responsibility for any damage caused by this virus.It was ...

  8. USACO Section1.3 Mixing Milk 解题报告

    milk解题报告 —— icedream61 博客园(转载请注明出处)----------------------------------------------------------------- ...

  9. SSH集成cxf 发布restful webservice

    首先讲一下什么是restful webservice ,这个问题网上一搜有很多博文去长篇大论的介绍它,但是最后你看完了也会觉得云里雾里的,所以我在这里简单的讲一下我理解的rest webservice ...

  10. 解决使用Oracle数据库,项目启动由于表原因无法成功启动问题

    1.仔细看异常信息,如果出现一个  翻译过来是 不仅仅这一张表,那就说明,在连接数据库,定位到表的时候有多张表,不知道连哪一张. 原因: 有多个用户,这两个用户下有相同的表. 就算是在不同的表空间也不 ...