我的第三十三篇博客---flask

使用框架的优点:
稳定性和可扩展性强
可以降低开发难度,提高了开发效率

在Python中常用的Web框架有:
flask
django
tornado

Flask诞生于2010年,是Armin ronacher用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQL_Alchemy),都需要用第三方的扩展来实现。
其WSGI工具箱采用Werkzeug(路由模块),模块引擎则使用Jinja2.这两个也是Flask框架的核心

Flask常用扩展包:
Flask-SQLalchemy:操作数据库
Flask-script:插入脚本
Flask-migrate:管理迁移数据库
Flask-Session:Session存储方式指定
Flask-WTF:表单
Flask-Mail:邮件
Flask-Bable:提供国际化和本地化支持,翻译;
Flask-Login:认证用户状态;
Flask-OpenID:认证;
Flask-RESTful:开发REST API的工具;
Flask-Bootstrap:集成前端Twitter Bootstrap框架;
Flask-Moment:本地化日期和时间;
Flask-Admin:简单而可扩展的管理接口的框架

扩展列表:http://flask.pocoo.org/extensions/

1.中文文档(http://docs.jinkan.org/docs/flask/)
2.英文文档(http://flask.pocoo.org/docs/0.11/)

基本格式:
from flask import Flask
app=Flask(__name__)
@app.route(‘/‘)
def a():
return ‘aa‘
app.run()

打开谷歌 网址为你的ip地址后加上:再加上默认的端口号5000 页面展示为aa

app.run(host=‘0.0.0.0‘,port=80,debug=True)
host:设置为‘0.0.0.0‘时在同一个局域网别的电脑ip都能访问,不设置这个参数时只有自己的ip能访问
port:是默认端口号,为80时,网址后面不用加:你设置的端口号,
debug:在代码中修改return的值后debug的值为True时,不用重新执行程序,刷新网页即可刷新内容

拓展:
from flask import Flask
app=Flask(__name__)
@app.route(‘/<orders_id>‘) #加个<> <>里写的内容为参数
def a(orders_id):
return ‘%s‘%orders_id
app.run()
在谷歌里输入你的ip后加上/你要写的内容 网页展示内容即为你要写的内容
如果限制只能是数字的话 <int:orders_id> <float:orders_id>

return 只能返回字符串 和render_template
如果要返回字典之类的 要转成json类型
import json
json.dumps()

from flask import Flask,jsonify

return {‘a‘:‘b‘} 报错
return str({‘a‘:‘b‘}) 纯文本形式,没有数据类型,即没有键值对
return json.dumps({‘a‘:‘v‘}) 文本形式,但保留了键值对
return jsonify({‘a‘:‘v‘}) json类型 有键值对

app.conifg[‘JSON_AS_ASCII‘]=False #将返回的汉字不以ASCII形式返回

app.config.from_pyfile(‘settings.ini‘) 可以新建settings.ini 在这里写配置

 重定向

from flask import Flask,redirect,url_for
app=Flask(__name__)
@app.route(‘/‘)
def a():
return ‘a‘

@app.route(‘/five‘)
def five():
return redirect(url_for(‘a‘)) #当你输入网址为你的ip+/+five 时 这个网页展示内容其实就跳转到a()方法里返回的内容
____________________________________________________________________________
重定向到黑马官网
@app.route(‘/demo5‘)
def demo5():
return redirect(‘http://www.itheima.com‘)
____________________________________________________________________________
重定向到自己写的视图函数
可以直接填写自己url路径
也可以使用url_for生成指定视图函数所对应的url

@app.route(‘/demo1‘)
def demo1():
return ‘demo1‘

#重定向
@app.route(‘/demo5‘)
def demo5():
return redirect(url_for(‘demo1‘))
____________________________________________________________________________
重定向到带有参数的视图函数

在 url_for 函数中传入参数

# 路由传递参数
@app.route(‘/user/<int:user_id>‘)
def user_info(user_id):
return ‘hello %d‘ % user_id

# 重定向
@app.route(‘/demo5‘)
def demo5():
# 使用 url_for 生成指定视图函数所对应的 url
return redirect(url_for(‘user_info‘, user_id=100))

取网址参数:

from flask import Flask,request,jsonify
app=Flask(__name__)
@app.route(‘/<id>‘)
def a(id):
return ‘%s‘%id

当你输入的网址为你的ip + / + 你要展现的内容, 页面内容即为你要展现的内容

@app.route(‘/‘)
def b():
name=request.args.get(‘name‘)
id=request.args.get(‘id‘)
return jsonify({‘name‘:name,‘id‘:id})

当你输入的网址为你的ip + /? +name=小明&id=7 展现的内容即为{‘name‘:小明,‘id‘:7}

指定文本类型:

json类型: ‘content-type‘:‘application/json‘
字符串类型:‘content-type‘:‘text/plain‘
解析类型:‘content-type‘:‘text/html‘

route:

指定路由地址
#指定访问路径为demo1
@app.route(‘/demo‘)
def demo1():
return ‘demo1‘

给路由传参
有时我们需要将同一类URL映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息

#路由传递参数
@app.route(‘/user/<user_id>‘)
def user_info(user_id):
return ‘hello %s‘%user_id

输入的网址后缀加的什么 在网页展示的就是什么,下面那个函数括号里必须是上面的参数
路由传递的参数默认当作string处理,也可以指定参数的类型

#路由传递参数
@app.route(‘user/<int:user_id>‘)
def user_info(user_id):
return ‘hello %d‘%user_id

这里指定int,尖括号中的内容是动态的。在此暂时可以理解为接受int类型的值,实际上int代表使用IntergeConverter去处理url传入的参数

指定请求方式
在Flask中。定义一个路由,默认的请求方式为:
GET
OPTIONS(自带)
HEAD (自带)

如果像添加请求方式,
@app.route(‘/demo2‘,methods=[‘GET‘,‘POST‘])
def demo2():
#直接从请求中取到请求方式并返回
return request.method

request属性:

request就是flask中代表当前请求的request对象,期中一个请求上下文变量(理解成全局变量,在视图函数中直接使用可以取到当前本次请求)
属性 说明 类型
data 记录请求的数据,并转换为字符串 *
form 记录请求中的表单数据 MultiDict
args 记录请求中的查询参数 MultiDict
cookies 记录请求中的cookie信息 Dict
headers 记录请求中的报文头 EnvironHeaders
method 记录请求使用的HTTP方法 GET/POST
url 记录请求的URL地址 string
files 记录请求上传的文件 *

Request.Form:获取以POST方式提交的数据(接收Form提交来的数据);
Request.QueryString:获取地址栏参数(以GET方式提交的数据)
Request:包含以上两种方式(优先获取GET方式提交的数据),它会在QueryString、Form、ServerVariable中都搜寻一遍。

requests模块发送请求有data、params两种携带参数的方法。

params在get请求中使用,data在post请求中使用。params是往url后面添加参数,data是指POST请求传入的字典或对象

原文地址:https://www.cnblogs.com/sll-csdn/p/10926160.html

时间: 2024-11-05 19:04:45

我的第三十三篇博客---flask的相关文章

我的第三十一篇博客---mongo

mongo 进入Mongoshow dbs 展示出mongo里数据库有哪些db 显示当前数据库use admin 切换到admin这个数据库show collections 展示里面的集合 db.info.insert({'name':'zhangsan','age':20}) 向当前数据库info列里插入这项数据db.info.find() 查询info里的数据db.dropDatabase() 删除当前的数据库 mongodb集合的命令不手动创建集合:向不存在的集合中第一次加入数据时,集合会

我的第二十三篇博客---爬虫简介

网络爬虫(又被称为网页蜘蛛,网络机器人) 就是模拟客户端(主要指浏览器)发送网络请求,接收请求响应,按照一定的规则,自动地抓取互联网信息的程序.原则上,只要是客户端(主要指浏览器)能做的事情,爬虫都能够做. 爬虫分类:通用爬虫:通常指搜索引擎的爬虫(百度,谷歌) 聚焦爬虫:针对特定网站的爬虫 积累式爬虫:从开始运行到打到停止条件的过程中不断爬取目标数据,过程中会进行去重操作增量式爬虫:只爬取新产生的或者已经发生变化网页的爬虫深网爬虫:隐藏在搜索表单或登录表单之后的数据,只有用户提交一些关键词或登

我的第三十篇博客---scrapy框架

scrapy安装需要一个异步模块Twisted,这个模块得自己手动安装 Twisted下载地址:https://blog.csdn.net/coco56/article/details/82145425 如果自己是python 37 -64位,可以下载这个网盘的文件 按需求选取 pycharm 安装: pip install Twisted存放的路径 打开cmd 运行 scrapy 出数据表示安装成功 不是内部命令,未安装 然后 需要升级 运行指令: pip install pypiwin32

一篇博客分清shell中的状态返回值-return-break-continue-exit

一篇博客分清shell中的状态返回值-return-break-continue-exit 一.break.continue.exit.return的区别和对比 条件与循环控制及程序返回值命令知识表 命令 说明 break n 如果省略n,则表示跳出整个循环,n表示跳出循环的层数 continue n 如果省略n,则表示跳出本次循环,忽略本次循环剩余代码,进入循环的下一次循环.n表示退到第n层继续循环 exit n 表示退出当前shell程序,n为上一次程序执行的状态返回值,n也可以省略,在下一

一篇博客让你了解RxJava

RxJava可以说是2016年最流行的项目之一了,最近也接触了一下RxJava,于是想写一篇博客,希望能通过这篇博客让大家能对其进行了解,本篇博客是基于RxJava2.0,跟RxJava1.0还是有很多不同的 基础知识 RxJava的核心就是"异步"两个字,其最关键的东西就是两个: Observable(被观察者) Observer/Subscriber(观察者) Observable可以发出一系列的 事件,这里的事件可以是任何东西,例如网络请求.复杂计算处理.数据库操作.文件操作等等

[iOS]关于 App 混合(Hybrid)开发的优化,包括H5、Weex等(本篇博客主要针对 iOS 应用讲解,但该思想同样适用于Android)

我们知道混合开发,可以节省很多成本(时间成本,经济成本等等),所以有很多公司比较钟爱这种开发形式,今天所讲的优化方式,也是我在我们公司的应用中实际用了的,而且我写的这个优化的 SDK 已经开源到 github 上了,有兴趣的同学可以下载来看一下,有不足的地方欢迎指正.这里给出链接:https://. 转载请注明出处:http://www.cnblogs.com/shisishao/p/6830736.html -.首先,先介绍下什么是混合开发: 我们通常把移动开发分为Web.Native和Hyb

一篇博客彻底了解Android广播机制

首发于http://blog.csdn.net/pwiling/article/details/47682413,禁止转载 之前数次在程序中碰到Android广播,总是有这个疑问:往往是在发送广播的activity里面进行动态注册,动态注册必须要获得BroadcastReceiver对象,既然我们已经获得了广播接受器的对象,为何还要发送广播,直接用广播接收器的对象调用里面的相关逻辑处理的方法,不行吗?为什么还要绕这么一大圈用广播呢? 以前都是走马观花,这次弄清楚了.在解答这个问题之前,我们首先来

小白神器 - 一篇博客学会HTML

小白神器 - 一篇博客学会HTML 一. 简介 1. HTML 定义 htyper text markup language  即超文本标记语言. 超文本: 就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 标记语言: 标记(标签)构成的语言. 2. 标签定义和属性 是由一对尖括号包裹的单词构成 例如: <html> *所有标签中的单词不可能以数字开头. 标签不区分大小写.<html> 和 <HTML>. 推荐使用小写. 标签分为两部分: 开始标签<a

我的第一篇博客《Hello World》

Hello World! 大家好,这是我的第一篇博客. 作为一名程序员,为了保持优良的传统,所以就从Hello World 开始吧. 简单的介绍 关于名字 本人呢不太会起名字,试了好多个都被占用了,受一本小说影响,所以就起了这个名字. 同时呢,大家可以叫我铵静,做一个铵静的美男子哈. “高手有一颗寂寞的心,因为高手的造就本就是用寂寞堆积而成” —— <高手寂寞> 作者:兰帝魅晨 我的日常 目前主要从事Java EE企业级应用开发相关工作,业余时对网络安全比较感兴趣.周末主要是看看书,听听歌,偶