热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonflask是什么_pythonflask入门

简介flask是一个轻量级的基于Python的web框架。它没有太多复杂的功能,就像koa,需要一系列的插件来扩展其他功能,被称为micr

简介

flask是一个轻量级的基于Python的web框架。它没有太多复杂的功能,就像koa,需要一系列的插件来扩展其他功能,被称为microframework。flask没有默认使用的数据库等。

其他Python web框架:Django:它比flask重的多。包含了web开发的常用功能,orm、session、form、admin、分页、中间件、信号、缓存、contenttype等等,Django最著名的是它的全自动化的管理后台:只要使用ORM,做简单的对象定义,就能自动生成数据库结构和管理后台。

Tornado:特性是异步非阻塞,和nodejs很像、原生支持websocket。

什么是虚拟环境一个独立的Python开发环境,不会和系统Python产生干扰

完全可以独立自主运行,包括依赖的安装、卸载等

解决了项目Python运行环境、依赖包版本不统一的问题,不同的Python项目不会产生干扰

目前的两种实现方式virtualenv、pipenv

virtualenvvirtualenv是一个Python安装包

pip install virtualenv

virtualenv --no-site-packages ENV

# cd 到项目下

source ./bin/activate # 激活虚拟环境

decative # 退出环境pipenv

pip install pipenv

pipenv shell # 切换环境

pipenv install package # 安装对应的包到虚拟环境

pipenv lock

pipenv uninstall package

exit # 退出虚拟环境

安装初始化一个独立的运行环境

根据《python环境》的步骤使用pipenv初始化一个独立的运行环境

运行

pipenv shell安装flask

pipenv install flaskMini demo

访问 http://127.0.0.1:3000 , 得到响应数据"hello world":

from flask import Flask

app = Flask(__name__) # 程序名称

@app.route("/", methods=["GET", "POST"]) # 定义路由,指定哪些请求可以响应

def index():

return "hello world"

if __name__ == "__main__": # 在代码不是模块的情况下运行下面的代码

app.run(port=3000, debug=True) # port指定端口;debug为True时,修改代码,程序会自动重启

请求解析GET请求

导入request,从request对象获取请求数据:

浏览器请求:http://127.0.0.1:3000?user=john&age=18

from flask import Flask, request

app = Flask(__name__) # 程序名称

@app.route("/", methods=["GET"]) # 定义路由,指定哪些请求可以响应

def index():

request.args.__str__() # 获取所有的参数

request.args.get("name") # 获取单个参数,输出:john

requets.args.get("age") # 输出 18

return "hello world"

if __name__ == "__main__": # 在代码不是模块的情况下运行下面的代码

app.run(port=3000, debug=True) # port指定端口;debug为True时,修改代码,程序会自动重启POST请求

from flask import Flask

app = Flask(__name__) # 程序名称

@app.route("/", methods=["POST"]) # 定义路由,指定哪些请求可以响应

def index():

request.form # 获取form请求数据

request.form["name"] # 获取form中的name

request.form["age"] # 获取form中的age

request.json # 获取json格式请求数据,会自动将json数据转换为Python的dict或者list

request.json["name"] # 获取json数据中的name

request.json["age"] # 获取json数据中age

return "hello world"

if __name__ == "__main__": # 在代码不是模块的情况下运行下面的代码

app.run(port=3000, debug=True) # port指定端口;debug为True时,修改代码,程序会自动重启

请求响应

使用Response设置响应头

from flask import Flask, Response

import json

class Person:

def __init__(self, name, age):

self.__name__=name

self.__age__=age

def as_dict(self):

return {

"name": self.name,

"age": self.age

}

app = Flask(__name__) # 程序名称

@app.route("/", methods=["POST"]) # 定义路由,指定哪些请求可以响应

def index():

person = Person("John", 18)

return Response(json.dumps(person, default=Person.as_dict), mimetype="application/json") # 使用json.dumps转换为json格式。第一个参数为要转换的数据,第二个参数default为转换为json需要执行的方法。如果第一个参数是list,json.dumps会自动进行遍历。

if __name__ == "__main__": # 在代码不是模块的情况下运行下面的代码

app.run(port=3000, debug=True) # port指定端口;debug为True时,修改代码,程序会自动重启

另外,使用flask中的jsonify函数也可以进行转换。

COOKIE和session

flask中的session借助session实现,COOKIE由Response实现。

from flask import Flask, session, Response

app = Flask(__name__) # 程序名称

@app.route("/login", methods=["GET", "POST"]) # 定义路由,指定哪些请求可以响应

def login():

session["user_name"]=request.json[username] # 取出请求中的用户标识,存储在session中

res = Response("add COOKIE") # 使用COOKIE

res.set_COOKIE(key="COOKIE_demo", value="hello", expires=time.time()+6*60) # 6分钟失效

return "hello world"

@app.route("/logout", methods=["POST"])

def logout():

session.pop("username", None)

return redirect(url_for('login')) # 重定向到login

@app.route("/logout/del_COOKIE", methods=["POST"])

def logout0():

res = Response("del COOKIE") # 删除COOKIE

res.set_COOKIE("COOKIE_demo", "", expires=0) # 删除COOKIE

return res

if __name__ == "__main__": # 在代码不是模块的情况下运行下面的代码

app.run(port=3000, debug=True) # port指定端口;debug为True时,修改代码,程序会自动重启

数据库

flask-sqlalchemy是Falsk的SQLAlchemy的扩展。SQLAlchemy是Python的一个ORM(Object-Relational Mapping)框架。安装

pipenv install flask_sqlalchemy使用

项目结构:

flask初始化 app.py

from flask import Flask

import json

from db import db

from model.url import Url

app = Flask(__name__)

app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://wind:12345678@localhost/wind_dev" # 数据库连接字符串

app.config['SQLALCHEMY_COMMIT_TEARDOWN'] = True

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

db.init_app(app)

@app.route("/")

def index():

return "index page"

@app.route("/urls")

def urls():

url_list = Url.query.all() # 简单查询

return json.dumps(url_list, default=Url.as_dict)

if __name__ == '__main__':

app.run(port=5000, debug=True, threaded=False)

数据库配置 db.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

定义model

from db import db

class Url(db.Model):

__tablename__ = 'Urls' # 定义表名

urlId = db.Column(db.String, primary_key=True)

userId = db.Column(db.String)

url = db.Column(db.String)

description = db.Column(db.String)

type = db.Column(db.String)

logo = db.Column(db.String)

createdAt = db.Column(db.DateTime)

updatedAt = db.Column(db.DateTime)

def __init__(self, urlId, userId, url, description, type, logo, createdAt, updatedAt):

self.urlId = urlId

self.userId = userId

self.url = url

self.description = description

self.type = type

self.logo = logo

self.createdAt = createdAt

self.updatedAt = updatedAt

def __repr__(self): # 打印Url的格式,便于调试

return '' % self.url

def as_dict(self): # 转换为json时调用的函数 json.dumps(urls, default=Url.as_dict)

return {

"urlId": self.urlId,

"userId": self.userId,

"url": self.url,

"description": self.description,

"type": self.type,

"logo": self.logo,

"createdAt": self.createdAt.timestamp(),

"updatedAt": self.updatedAt.timestamp()

}

CURD

Url.query.all()

Url.query.filter_by(urlId="1").first()

Url.query.order_by(Url.urlId).all()

Url.query.limit(1).all()

Url.query.get(urlId="1")

url=Url.get(urlId="1")

db.session.delete(url)

db.session.commit()

url=Url("id123", "uid00", "http://www.google.com", "google", "search engine", "http://www.google.com/logo.png", time.timestamp(), time.timestamp())

db.session.add(url)

db.session.commit()



推荐阅读
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 安装oracle软件1创建用户组、用户和目录bjdb节点下:[rootnode1]#groupadd-g200oinstall[rootnode1]#groupad ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
author-avatar
键盘上的泪g_752
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有