python flask框架,Python几种主流框架比较?
python flask框架,Python几种主流框架比较?详细介绍
本文目录一览: pythonflask是什么
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
python有什么框架
python有什么框架?让我们一起了解一下吧!python框架有很多,下面介绍几个常见的框架:1、DjangoDjango是比较出名的Python框架,它最出名的是其全自动化的管理后台,只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。2、FlaskFlask是一个用Python编写的轻量级Web应用框架,基于Werkzeug WSGI工具箱和Jinja2模板引擎。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。3、ScrapyScrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。4、TornadoTornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架有着明显的区别:它是非阻塞式服务器,而且速度相当快。5、Web2pyweb2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容 Google App Engine。6、WeppyWeppy感觉就像Flask的简约风格和Django的完整性之间的中间标记。虽然开发Weppy应用程序具有Flash的直接性,但Weppy具有Django中的许多功能,如数据层和身份验证。因此,Weppy适用于从极其简单到适度复杂的应用程序。拓展:什么是PythonPython是一种跨平台的计算机程序设计语言,是ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程,是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。今天的分享就是这些,希望能帮助到大家!
Python的Flask框架中web表单
下面为你介绍了Python的Flask框架中web表单的教程,表单是学习各个web框架中的基础知识,需要的朋友可以参考下概要在前面章节我们为主页定义了一个简单的模板,部分尚未实现的模块如用户或帖子等使用模拟的对象作为临时占位。本章我们将看到如何利用web表单填补这些空白。web表单是web应用中最基本的构建要素,我们将通过表单来实现用户发帖和应用登录功能。完成本章内容你需要基于前面章节完成的微博应用代码,请确认这些代码已安装并能正常运行。配置Flask-WTF是WTForms项目的Flask框架扩展,我们将用他来帮助我们处理web表单。大部分Flask扩展都需要定义相关配置项,所以我们先来在应用根目录下创建一个配置文件以备使用。我们先这样创建 (fileconfig.py):SRF_ENABLED = TrueSECRET_KEY = you-will-never-guess很简单吧,这是Flask-WTF需要用到的2个配置项。CSRF_ENABLED配置启用了跨站请求攻击保护,大部分情况下你都需要开启此功能,这能使你的应用更安全。SECRET_KEY设置当CSRF启用时有效,这将生成一个加密的token供表单验证使用,你要确保这个KEY足够复杂不会被简单推测。现在这个配置文件已经基本可用了。项目创建完成我们可以创建如下文件并编辑(fileapp/__init__.py):?from flask import Flaskapp = Flask(__name__)app.config.from_object(config)from app import views用户登录表单使用Flask-WTF创建的表单就像一个对象,需要从Form类继承子类。然后在这个子类中定义一些类的属性变量作为表单字段就可以了。我们要创建一个登录表单,用来进行用户身份识别。但跟平常需要验证用户名和密码的登录方式不同,我们将使用 OpenId 来处理登录过程。使用OpenId的好处就是我们不用管那些用户名和密码的认证过程,交给 OpenId 去搞定,它会返回给我们用户验证后的数据。这样对于使用我们网站的用户而言也更安全。使用 OpenId 登录只需要一个字符串,然后发送给 OpenId 服务器就行了。另外我们还需要在表单中加一个“记住我” 的选项框,这个是送给那些不想每次来我们网站都要进行身份认证的人。选择这个选项后,首次登录时会用cookie在他们的浏览器上记住他们的登录信息,下次再进入网站时就不需要进行登录操作。开始我们的第一个表单吧 (fileapp/forms.py):?from flask.ext.wtf import Form, TextField, BooleanFieldfrom flask.ext.wtf import Requiredclass LoginForm(Form):openid = TextField(openid, validators = [Required()])remember_me = BooleanField(remember_me, default = False)欣赏一下这个类,多么的简洁,多么的一目了然。如此简单,但又十分的富有内涵。我们引入了一个 Form 类,然后继承这个类,按需求还添加了 TextField 和 BooleanField 这两个字段。另外还引入了一个表单验证函数 Required,这种验证函数可以附加在字段里面,在用户提交表单时它们会用来检查用户填写的数据。这个 Required 函数是用来防止用户提交空数据。Flask-WTF 中还有很多不同作用的表单验证函数,我们将会在后面使用到它们。表单模板现在我们的问题就是需要一个显示这个登录表单的模板。好消息是我们刚刚创建的登录表单类知道如何把字段转换成HTML,所以我们只需要把注意力集中到页面布局上。下面就是我们的登录表单的模板 (fileapp/templates/login.html):-- extend from base layout --{% extends base.html %}{% block content %}h1Sign In/h1form action= method=post name=login{{form.hidden_tag()}}pPlease enter your OpenID:br{{form.openid(size=80)}}br/pp{{form.remember_me}} Remember Me/ppinput type=submit value=Sign In/p/form{% endblock %}容我_嗦一下,在这个模板中,我们又一次使用了模板继承的方式。使用 extends 语句从 base.html 继承模板内容。我们会在后面创建的模板中继续使用这种方式,这样可以使我们所有的页面布局保持一致。这个登录模板跟普通的HTML表单有些明显的区别,它使用模板参数 {{ ... }} 来实例化表单字段,而表单字段又来源于我们刚刚定义的表单类,模板参数中使用了 form 这个名称。当我们使用视图函数引用表单类并渲染到模板时,我们要特别注意这个把表单类传递到模板的变量名。我们在配置中开启了CSRF(跨站伪造请求)功能,模板参数 {{ form.hidden_tag() }} 会被替换成一个具有防止CSRF功能的隐藏表单字段。在开启了CSRF功能后,所有模板的表单中都需要添加这个模板参数。我们定义的表单对象中的字段同样也能被模板渲染,只需要在模板合适的位置添加类似于 {{ form.field_name }} 这样的模板参数,相关字段就会在被定义的位置出现。另外还有一些字段是可以传参数,比如这个 openid 字段,我们就添加了一个参数让它显示的宽度增加到80个字符。由于我们没有在表单中定义一个提交功能的按钮,所以在这里只能以普通表单字段的方式来做了。不过说起来区区一个按钮,在表单中跟任何数据都没有关系,的确也没有在表单类中定义的必要。表单视图见证奇迹的时刻最后一步,我们马上要来写一个渲染登录表单对象到模板的视图函数。这个函数相当的简单无趣,因为我们只需要把表单对象传递给模板就行了。下面就是我们这个视图函数的全部内容 (fileapp/views.py):1112from flask import render_template, flash, redirectfrom app import appfrom forms import LoginForm# index view function suppressed for brevity@app.route(/login, methods = [GET, POST])def login():form = LoginForm()return render_template(login.html,title = Sign In,form = form)我们引入登录表单类,然后把它实例化到一个变量,最后再把这个变量传给模板。要渲染表单字段必须的事情也就这些。上面的代码中还引入了两个新对象: falsh 和 redirect, 这个先甭理它们,稍后才用得上。另外还做了一件事就是在路由装饰器中添加一个新方法。让 Flask 明白我们这个视图函数支持 GET 和 POST 请求。否则这个视图函数只会响应 GET 请求。我们需要得到用户填写表单后提交的数据,这些数据是从 POST 请求中传递过来的。你可以通过在浏览器中测试这个程序来了解上面所说的。 按照视图函数关联的路由,你应该在浏览器中输入 由于我们还没有写任何接收数据的代码,所以现在你在页面中点提交按钮还没有任何效果。从表单中接收数据另外值得一提的是, Flask-WTF 对表单提交数据的处理使我们的接下来要做的事情变得简单了。下面就是我们这个登录视图函数的新版本, 加入了表单数据验证和处理 (fileapp/views.py):?789@app.route(/login, methods = [GET, POST])def login():form = LoginForm()if form.validate_on_submit():flash(Login requested for OpenID= + form.openid.data + , remember_me= + str(form.remember_me.data))return redirect(/index)return render_template(login.html,title = Sign In,form = form)validate_on_submit() 这个方法做了表单处理的所有工作。如果你在表单向用户提供数据时(举个栗子:用户在它之前修改了一下提交的数据) 时调用此方法,它会返回 False。发生这样的情况时,你懂的。不懂?就是提交的数据验证不通过,你要继续渲染模板。在提交请求时调用了表单的 validate_on_submit() 方法后,它会从请求中获取所有提交的数据,然后使用表单字段中绑定的验证函数进行数据验证。在所有的数据都验证通过时会返回 True. 这就意味着你可以放心的使用这些表单数据了。只要有一个字段验证不通过,它都会返回 False. 这时就需要我们返回数据给用户,让他们来纠正一下错误数据。接下来我们将会看到在数据验证失败时,如何把错误消息显示给用户。当 validate_on_submit() 方法返回 True 的时候,我们的视图函数又会调用两个新的函数。它们都是从Flask 中引入的,flash 函数用来在下一个打开的页面中显示定义的消息。我们现在用它用来做调试。因为我们现在还没有做用户登录模块, 所以只需要把用户提交上来的数据显示一下就行了。flash 函数非常有用,比如为用户的一些操作提供消息反馈。flash 函数提供的消息不会自动出现在我们的网站页面中,所以我们需要做点事情让它在页面中显示出来。为了让我们所有页面都能有这项激动人心的功能,所以就把它添加到基础模板中吧, 下面是更新后的基础模板 (fileapp/templates/base.html):htmlhead{% if title %}title{{title}} - microblog/title{% else %}titlemicroblog/title{% endif %}/headbodydivMicroblog: a href=/indexHome/a/divhr{% with messages = get_flashed_messages() %}{% if messages %}ul{% for message in messages %}li{{ message }} /li{% endfor %}/ul{% endif %}{% endwith %}{% block content %}{% endblock %}/body/html模板中显示 flash 消息的功能希望你能明白。在视图函数中我们使用的另一个新函数就是 redirect. 这个函数会通知用户的浏览器跳转到指定的地址。在我们的视图函数中,我们使用它跳转到了首页。注意跳转结束后页面上还会显示 flash 函数传递的消息哦。激动人心的时刻到了,运行我们的程序吧,看看表单是如何工作的吧。不要填写表单中的 openid 字段,看看 Required 这个验证函数是如何发挥威力,把一切发起空数据的请求阻止在千里之外。改善一下字段验证我们程序目前状况不错,提交不合要求的数据会被阻止,还会返回表单让用户修改,基本满足我们要求。但似乎还少点什么。如果我们在用户提交数据失败后给用户点提示,让他们知道什么原因引起的,岂不妙哉!太幸运了,用 Flask-WTF 可以轻松解决这个问题。当表单字段验证失败时, Flask-WTF 会添加一个错误消息到表单对象。这些消息在模板中也是可以使用的,所以我们只需要在模板中添加一点点东西就OK了。这个就是我们添加了验证消息的登录模板 (fileapp/templates/login.html):161718!-- extend base layout --{% extends base.html %}{% block content %}h1Sign In/h1form action= method=post name=login{{form.hidden_tag()}}pPlease enter your OpenID:br{{form.openid(size=80)}}br{% for error in form.errors.openid %}span style=color: red;[{{error}}]/span{% endfor %}br/pp{{form.remember_me}} Remember Me/ppinput type=submit value=Sign In/p/form{% endblock %}我们仅在 openid 字段的右边添加了一个循环语句,它会把openid字段验证失败的消息都显示出来。不论你的表单有多少字段,所有表单字段验证失败的错误消息都可以用 form.errors.字段名 这种方式来使用。这个表单中我们的是 form.errors.openid。为了让错误消息引起用户的注意,我们还给消息添加了显示红色的 css 样式。处理 OpenID 登录现实生活中,我们发现有很多人都不知道他们拥有一些公共账号。一部分大牌的网站或服务商都会为他们的会员提供公共账号的认证。举个栗子,如果你有一个 google 账号,其实你就有了一个公共账号,类似的还有 Yahoo, AOL, Flickr 等。为了方便我们的用户能简单的使用他们的公共账号,我们将把这些公共账号的链接添加到一个列表,这样用户就不用自手工输入了。我们要把一些提供给用户的公共账号服务商定义到一个列表里面,这个列表就放到配置文件中吧 (fileconfig.py):?789CSRF_ENABLED = TrueSECRET_KEY = you-will-never-guessOPENID_PROVIDERS = [{ name: Google, url: { name: Yahoo, url: { name: AOL, url: { name: Flickr, url: { name: MyOpenID, url:}]接下来就是要在我们的登录视图函数中使用这个列表了:@app.route(/login, methods = [GET, POST])def login():form = LoginForm()if form.validate_on_submit():flash(Login requested for OpenID= + form.openid.data + , remember_me= + str(form.remember_me.data))return redirect(/index)return render_template(login.html,title = Sign In,form = form,providers = app.config[OPENID_PROVIDERS])我们从 app.config 中引入了公共账号服务商的配置列表,然后把它作为一个参数通过 render_template 函数引入到模板。接下来要做的我想你也猜得到,我们需要在登录模板中把这些服务商链接显示出来。2425262728293031323334!-- extend base layout --{% extends base.html %}{% block content %}script type=text/javascriptfunction set_openid(openid, pr){u = openid.search(username)if (u != -1) {// openid requires usernameuser = prompt(Enter your+ pr +username:)openid = openid.substr(0, u) + user}form = document.forms[login];form.elements[openid].value = openid}/scripth1Sign In/h1form action= method=post name=login{{form.hidden_tag()}}pPlease enter your OpenID, or select one of the providers below:br{{form.openid(size=80)}}{% for error in form.errors.openid %}span style=color: red;[{{error}}]/span{% endfor %}br|{% for pr in providers %}a href=javascript:set_openid({{pr.url}}, {{pr.name}});{{pr.name}}/a |{% endfor %}/pp{{form.remember_me}} Remember Me/ppinput type=submit value=Sign In/p/form{% endblock %}这次的模板添加的东西似乎有点多。一些公共账号需要提供用户名,为了解决这个我们用了点 javascript。当用户点击相关的公共账号链接时,需要用户名的公共账号会提示用户输入用户名, javascript 会把用户名处理成可用的公共账号,最后再插入到 openid 字段的文本框中。下面这个是在登录页面点击 google 链接后显示的截图:
在Python的Flask框架下收发电子邮件
这篇文章主要介绍了在Python的Flask框架下收发电子邮件的教程,主要用到了Flask中的Flask-mail工具,需要的朋友可以参考下在大多数此类教程中都会不遗余力的介绍如何使用数据库。今天我们对数据库暂且不表,而是来关注另一个在web应用中很重要的特性:如何推送邮件给用户。在某个轻量级应用中我们可能会添加一个如下的邮件服务功能:当用户有了新的粉丝后,我们发送一封邮件通知用户。有很多方法可以实现这个特性,而我们希望提供出一种可复用的通用框架来处理。Flask-Mail介绍对于我们来说是幸运的,现在已经有很多外部插件来处理邮件,虽说不能百分百按照我们的想法去处理,但已经相当接近了。在虚拟环境中安装 Flask-Mail是相当简单的。Windows以外的用户可以利用以下命令来安装:?1flask/bin/pip install flask-mailWindows用户的安装稍有不同,因为Flask-Mail所使用的一些模块不能再Windows系统上运行,你可以使用以下命令:?1flaskScriptspip install --no-deps lamson chardet flask-mail配置:回想一下前文中单元测试部分的案例,我们通过添加配置支持了一个这样的功能:当应用的某个版本测试出错时可以邮件通知我们。从这个例子就可以看出如何配置使用邮件支持。再次提醒大家,我们需要设置两个方面的内容:邮件服务器信息用户邮箱地址如下正是前文中所用到的配置# email serverMAIL_SERVER =MAIL_PORT = 25MAIL_USE_TLS = FalseMAIL_USE_SSL = FalseMAIL_USERNAME = youMAIL_PASSWORD = your-password# administrator listADMINS = [you@example.com]其中并没有设置切实可用的邮件服务器和邮箱。现在我们通过一个例子来看如何使用gmail邮箱账户来发送邮件:# email serverMAIL_SERVER =MAIL_PORT = 465MAIL_USE_TLS = FalseMAIL_USE_SSL = TrueMAIL_USERNAME = your-gmail-usernameMAIL_PASSWORD = your-gmail-password# administrator listADMINS = [your-gmail-username@gmail.com]另外我们也可以初始化一个Mail对象来连接SMTP邮件服务器,发送邮件:?12from flask.ext.mail import Mailmail = Mail(app)发个邮件试试!为了了解flask-mail如何工作的,我们可以从命令行发一封邮件看看。进入python shell并执行如下的脚本:?7from flask.ext.mail import Messagefrom app import mailfrom config import ADMINSmsg = Message(test subject, sender = ADMINS[0], recipients = ADMINS)msg.body = text bodymsg.html = bHTML/b bodymail.send(msg)上面这段代码会根据inconfig.py中配置的邮箱地址列表,以首个邮箱作为发件人给所有邮箱发送一封邮件。邮件内容会以文本和html两种格式呈现,而你能看到哪种格式取决于你的邮件客户端。多么简单小巧!你完全可以现在就把它集成到你的应用中。邮件框架我们现在可以编写一个帮助函数来发送邮件。这是以上测试中一个通用版的测试。我们把这个函数放进一个新的原文件中用作邮件支持(fileapp/emails.py):?78from flask.ext.mail import Messagefrom app import maildef send_email(subject, sender, recipients, text_body, html_body):msg = Message(subject, sender, recipients)msg.body = text_bodymsg.html = html_bodymail.send(msg)Flask-Mail的邮件支持超出了我们目前的使用范围,像密件抄送和附件的功能并不会在此应用中得以使用。Follower 提醒现在,我们已经有了发邮件的基本框架,我们可以写发送follower提醒的函数了 (fileapp/emails.py):11from flask import render_templatefrom config import ADMINSdef follower_notification(followed, follower):send_email([microblog] %s is now following you! % follower.nickname,ADMINS[0],[followed.email],render_template(follower_email.txt,user = followed, follower = follower),render_template(follower_email.html,user = followed, follower = follower))你在这里找到任何惊喜了吗?我们的老朋友render_template函数有一次出现了。如果你还记得,我们使用这个函数在views渲染模版. 就像在views里写html不好一样,使用邮件模版是理想的选择。我们要可能的将逻辑和表现分开,所以email模版也会和其它试图模版一起放到在模版文件夹里.所以,我们需要为follower提醒邮件写纯文本和网页版的邮件模版,下面这个是纯文本的版本 (fileapp/templates/follower_email.txt):?789Dear {{user.nickname}},{{follower.nickname}} is now a follower. Click on the following link to visit {{follower.nickname}}s profile page:{{url_for(user, nickname = follower.nickname, _external = True)}}Regards,The microblog admin下面这个是网页版的邮件,效果会更好(fileapp/templates/follower_email.html):111213pDear {{user.nickname}},/ppa href={{url_for(user, nickname = follower.nickname, _external = True)}}{{follower.nickname}}/a is now a follower./ptabletr valign=toptdimg src={{follower.avatar(50)}}/tdtda href={{url_for(user, nickname = follower.nickname, _external = True)}}{{follower.nickname}}/abr /{{follower.about_me}}/td/tr/tablepRegards,/ppThe codemicroblog/code admin/p注解:模版中的url_for函数的 _external = True 参数的意义.默认情况下,url_for 函数生成url是相对我们的域名的。例如,url_for(index)函数返回值是/index, 但是,发邮件是我们想要最后一步是处理“follow”过程,即触发邮件提醒时的视图函数,(fileapp/views.py):?789from emails import follower_notification@app.route(/follow/nickname)@login_requireddef follow(nickname):user = User.query.filter_by(nickname = nickname).first()# ...follower_notification(user, g.user)return redirect(url_for(user, nickname = nickname))现在你可以创建两个用户(如果还没有用户的话)尝试着用让一个用户follow另一个用户,理解邮件提醒是怎样工作的。就是这样吗?我们做完了吗?我们可能心底里很兴奋完成了这项工作并且把邮件提醒功能同未完成列表里删除。但是,如果你现在测试下应用,你会发现当你单击follow链接的时候,页面会2到3秒才会响应,浏览器才会刷新,这在之前是没有的。发生了什么?问题是,Flask-Mail 使用同步模式发送电子邮件。 从电子邮件发送开始,直到电子邮件交付后,给浏览器发回其响应,在整个过程中,Web服务器会一直阻塞。如果我们试图发送电子邮件到一个服务器是缓慢的,甚至更糟糕的,暂时处于脱机状态,你能想象会发生什么吗?很不好。这是一个可怕的限制,发送电子邮件应该是后台任务且不会干扰Web服务器,让我们看看我们如何能够解决这个问题。Python中执行异步调用我们想send_email 函数发完邮件后立即返回,需要让发邮件移动到后台进程来异步执行。事实上python已经对异步任务提供了支持,但实际上,还可以用其他的方式,比如线程和多进程模块也可以实现异步任务。每当我们需要发邮件的时候,启动一个线程来处理,比启动一个全新的进程节省资源。所以,让我们将mail.send(msg)调用放到另一个线程中。(fileapp/emails.py):11from threading import Threaddef send_async_email(msg):mail.send(msg)def send_email(subject, sender, recipients, text_body, html_body):msg = Message(subject, sender = sender, recipients = recipients)msg.body = text_bodymsg.html = html_bodythr = threading.Thread(target = send_async_email, args = [msg])thr.start()如果你测试‘follow‘函数,现在你会发现浏览器在发送邮件之前会刷新。所以,我们已经实现了异步发送,但是,如果未来在别的需要异步功能的地方难道我们还需要在实现一遍吗?过程都是一样的,这样就会在每一种情况下都有重复代码,这样非常不好。我们可以通过 decorator改进代码。使用装饰器的代码是这样的:11from decorators import async@asyncdef send_async_email(msg):mail.send(msg)def send_email(subject, sender, recipients, text_body, html_body):msg = Message(subject, sender = sender, recipients = recipients)msg.body = text_bodymsg.html = html_bodysend_async_email(msg)更好了,对不对?实现这种方式的代码实际上很简单,创建一个新源文件(fileapp/decorators.py):?7from threading import Threaddef async(f):def wrapper(*args, **kwargs):thr = Thread(target = f, args = args, kwargs = kwargs)thr.start()return wrapper现在我们对异步任务创建了个有用的框架(framework), 我们可以说已经完成了!仅仅作为一个练习,让我们思考一下为什么这个方法会看上去使用了进程而不是线程。我们并不想每当我们需要发送一封邮件时就有一个进程被启动,所以我们能够使用thePoolclass而不用themultiprocessingmodule。这个类会创建指定数量的进程(这些都是主进程的子进程),并且这些子进程会通过theapply_asyncmethod送到进程池,等待接受任务去工作。这可能对于一个繁忙的网站会是一个有趣的途径,但是我们目前仍将维持现在线程的方式。
Python 有哪些好的 Web 框架
Django, Pyramid, Bottle, Tornado, Flask, web2py.
具体介绍如下:
Django:开源Web开发框架,它鼓励快速开发,并遵循MVC设计,开发周期短。
Tornado:一个轻量级的Web框架,内置非阻塞式服务器,而且速度相当快
webpy:一个小巧灵活的Web框架,虽然简单但是功能强大。
Flask:一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。
Bottle:一个Python Web框架,整个框架只有一个文件,几十K,却自带了路径映射、模板、简单的数据库访问等web框架组件,确实是个可用的框架。初学web开发可以拿来玩玩,其语法简单,部署也很方便。
1、Django框架
优点:是一个高层次Python Web开发框架,特点是开发快速、代码较少、可扩展性强。Django采用MTV(Model、Template、View)模型组织资源,框架功能丰富,模板扩展选择最多。对于专业人员来说,Django是当之无愧的Python排名第一的Web开发框架。
缺点:包括一些轻量级应用不需要的功能模块,不如Flask轻便。过度封装很多类和方法,直接使用比较简单,但改动起来比较困难。相比于 C,C++性能,Django性能偏低。模板实现了代码和样式完全分离,不允许模板里出现Python代码,灵活度不够。另外学习曲线也相对陡峭。
2、Flask框架
优点:Flask是一个Python Web开发的微框架,严格来说,它仅提供Web服务器支持,不提供全栈开发支持。然而,Flask非常轻量、非常简单,基于它搭建Web系统都以分钟来计时,特别适合小微原型系统的开发。花少时间、产生可用系统,是非常划算的选择。
缺点:对于大型网站开发,需要设计路由映射的规则,否则导致代码混乱。对新手来说,容易使用低质量的代码创建 “不良的web应用程序”。
3、Pyramid框架
优点:是一个扩展性很强且灵活的Python Web开发框架。上手十分容易,比较适合中等规模且边开发边设计的场景。Pyramid不提供绝对严格的框架定义,根据需求可以扩展开发,对高阶程序员十分友好。
缺点:国内知名度不高,高级用法需要通过阅读源代码获取灵感。默认使用Chameleon模板,灵活度没有成为一个要素。
4、web.py框架
优点:正如其名,web.py是一个采用Python作为开发语言的Web框架,简单且强大。俄罗斯排名第一的Yandex搜索引擎基于这个框架开发,Guido van Rossum认为这是最好的Python Web框架,还需要说别的吗?有事实作证、有大牛认可,用起来吧!
缺点:Web.py并未像其他框架一样保持与Python 3兼容性的最新状态。这不仅意味着缺乏对异步语法的支持,还意味着缺少对已弃用的函数的错误。此外,目前尚不清楚维护者是否有计划在Python 2到达其支持生命周期结束后保持Web.py的最新状态。
5、Tornado框架
优点:Tornado是一个基于异步网络功能库的Web开发框架,因此,它能支持几万个开放连接,Web服务高效稳定。可见,Tornado适合高并发场景下的Web系统,开发过程需要采用Tornado提供的框架,灵活性较差,确定场景后再考虑使用不迟。
缺点:Tornado 5.0改进了与Python的本机异步功能的集成。因此不再支持Python 3.3.并且Python 3.5用户必须使用Python 3.5.2或更高版本。Tornado 6.0将需要Python 3.5及更高版本,并将完全放弃Python 2支持。
编程语言Python有哪些好的Web框架?
Python常用的web框架推荐:
1、Flask
Flask是一个轻量级的web框架,可以快速构建web应用程序。Flask的优点之一是其灵活性,因为它允许您在自己的代码项目中实现所需的定制。Flask适合小型项目和初学者,因为它的学习曲线较低。
2、Django
Django是一个功能强大的Web框架,适合大型项目。 它包括ORM,模板引擎,管理站点和完整的认证系统等内置功能。
Django的一个独特的优点是它的强大的管理站点,允许您在不编写任何HTML的情况下构建一个完整的后台管理应用程序。
Django具有强大的社区支持,因此可以轻松找到有用的示例代码和插件。
3、Pyramid
Pyramid是一个可伸缩的Web框架,旨在处理大型应用程序。 Pyramid具有高度定制的模式,使其在Web应用程序的多种应用中具有广泛的适用性。
Pyramid的一个重要优势是其可扩展性,允许您随着项目的不断发展进行逐步构建。
4、Bottle
Bottle是另一个轻量级的Web框架,适用于小型项目。 Bottle提供了一个快速而灵活的方法来构建Web应用程序,但它并不提供预定义的模板。
如果您需要快速启动一个小型Web应用程序并掌握它的完全控制权,则Bottle是一个不错的选择。
5、Tornado
Tornado是一个基于异步事件循环的Web框架,适用于需要高性能的应用程序。
Tornado提供了一种非阻塞的方式来处理Web请求和其他事件,这可以大大提高应用程序的吞吐量。Tornado还包括内置的Web服务器,可以轻松扩展。
总的来讲,Python在web开发领域有许多优秀的框架和工具可供选择。灵活性和可扩展性是Python
web开发的明显优势,而这些优势正吸引着越来越多的开发者转向Python。
1、Django:PythonWeb应用开发框架Django应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。
2、Bottle:微型PythonWeb框架Bottle是一个简单高效的遵循WSGI的微型pythonWeb框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。
3、Flask:也是一个Web应用框架
不同于Django它是轻量级Web应用框架。基于WerkzeugWSGI工具箱和Jinja2模板引擎。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。但是Flask是可以扩增的,你可以使用可以用Flask-extension增加前边没有的一些功能。
4、Tornado:异步非阻塞IO的PythonWeb框架Tornado的全称是ToradoWebServer,从名字上看就可知道它可以用作Web服务器,但同时它也是一个PythonWeb的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。Tornado和现在的主流Web服务器框架和大多数Python框架有着明显的区别:它是非阻塞式服务器,而且速度相当快。也是比较常被使用的Python开源框架之一。Web2py:全栈式Web框架Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容GoogleAppEngine。
webpy:轻量级的PythonWeb框架webpy的设计理念力求精简(Keepitsimpleandpowerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。
Python几种主流框架比较?
从GitHub中整理出的15个最受欢迎的Python开源框架。这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等。
Django:PythonWeb应用开发框架
Django应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。
Diesel:基于Greenlet的事件I/O框架
Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。
Flask:一个用Python编写的轻量级Web应用框架
Flask是一个使用Python编写的轻量级Web应用框架。基于WerkzeugWSGI工具箱和Jinja2
模板引擎。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数
据库、窗体验证工具。
Cubes:轻量级PythonOLAP框架
Cubes是一个轻量级Python框架,包含OLAP、多维数据分析和浏览聚合数据(aggregateddata)等工具。
Kartograph.py
:创造矢量地图的轻量级Python框架Kartograph是一个Python库,用来为ESRI生成SVG地图。
Kartograph.py
目前仍处于beta阶段,你可以在virtualenv环境下来测试。
Pulsar:Python的事件驱动并发框架
Pulsar是一个事件驱动的并发框架,有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。
Web2py:全栈式Web框架
Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容GoogleAppEngine。
Falcon:构建云API和网络应用后端的高性能Python框架
Falcon是一个构建云API的高性能Python框架,它鼓励使用REST架构风格,尽可能以最少的力气做最多的事情。
Dpark:Python版的Spark
DPark是Spark的Python克隆,是一个Python实现的分布式计算框架,可以非常方便地实现大规模数据处理和迭代计算。DPark由豆瓣实现,目前豆瓣内部的绝大多数数据分析都使用DPark完成,正日趋完善。
Buildbot:基于Python的持续集成测试框架
Buildbot是一个开源框架,可以自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。
Zerorpc:基于ZeroMQ的高性能分布式RPC框架
Zerorpc是一个基于ZeroMQ和MessagePack开发的远程过程调用协议(RPC)实现。和Zerorpc一起使用的ServiceAPI被称为zeroservice。Zerorpc可以通过编程或命令行方式调用。
Bottle:微型PythonWeb框架
Bottle是一个简单高效的遵循WSGI的微型pythonWeb框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。
Tornado:异步非阻塞IO的PythonWeb框架
Tornado的全称是ToradoWebServer,从名字上看就可知道它可以用作Web服务器,但同时它也是一个PythonWeb的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。
webpy:轻量级的PythonWeb框架
webpy的设计理念力求精简(Keepitsimpleandpowerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。
Scrapy:Python的爬虫框架
Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。
python轻量框架--Flask(入门教程)
1.建立: F:\Python\flask文件夹路径 2.安装virtualenv,在此路径下打开命令行窗口输入:
3.新建一个目录,并在里边创建virtualenv环境,在DOS下
如图:
这时你创建的myproject文件夹里面就多了一个venv文件夹:
4.激活虚拟环境
现在命令行前面多了个(venv)表示你在venv环境内
5.在virtualenv里安装Flask
完成。如图:
6.验证是否安装,你可以进入 Python 解释器,尝试导入 Flask:
如果没有报错,那么就安装成功了~如图:
1.在myproject文件夹下打开命令行:
cd app #进入app文件夹 mkdir static mkdir templates
我们的应用程序包是放置于 app 文件夹中。子文件夹 static 是我们存放静态文件像图片,JS文件以及样式文件。子文件夹 templates 显然是存放模板文件。
2.为我们的 app 包(文件 app/ init .py )创建一个简单的初始化脚本:
上面的脚本简单地创建应用对象,接着导入视图模块,该模块我们暂未编写。
视图是响应来自网页浏览器的请求的处理器。在 Flask 中,视图是编写成 Python 函数。每一个视图函数是映射到一个或多个请求的 URL。
3.让我们编写第一个视图函数(文件 app/views.py ):
其实这个视图是非常简单,它只是返回一个字符串,在客户端的网页浏览器上显示。两个 route 装饰器创建了从网址 / 以及 /index 到这个函数的映射。
4.能够完整工作的 Web 应用程序的最后一步是创建一个脚本,启动我们的应用程序的开发 Web 服务器。让我们称这个脚本为 run.py,并把它置于根目录:
这个脚本简单地从我们的 app 包中导入 app 变量并且调用它的 run 方法来启动服务器。请记住 app 变量中含有我们在之前创建的 Flask 实例。
5.要启动应用程序,您只需运行此脚本(run.py)
如图:
6.在服务器初始化后,它将会监听 5000 端口等待着连接。现在打开你的网页浏览器输入如下 URL:
另外你也可以使用这个 URL:
你看清楚了路由映射是如何工作的吗?第一个 URL 映射到 /,而第二个 URL 映射到 /index。这两个路由都关联到我们的视图函数,因此它们的作用是一样的。如果你输入其它的网址,你将会获得一个错误,因为只有这两个 URL 映射到视图函数。
你可以通过 Ctrl-C 来终止服务器
入门就到这里,比较简单的。 下一章: python轻量框架--Flask(模板详细版)
请请问Django与Flask这两种PythonWeb框架,哪一个国内更流行?
DjangoDjango是基于中间件的一个大型框架。框架本身的内容相当丰富,基础部分:模版引擎、ORM、表单、路由分发这些标配,还有不少的中间件:登陆、后台管理,这些还是官方中间件,另外还有不少的第三方中间件。关于第三方的我没有详细研究过,质量不太好评论。还有由ROR带起的基于命令的Web开发方式和扩展、还有内建的数据库迁移,基本上你呢想到的Django都有。可以说Django和Python相当匹配,前者是Web开发的万金油,后者是开发领域的万金油。另外Django这个框架本身还有一个专门的基金会,这个基金会是由Django的母公司成立的,估计有不少用这个框架的公司也对期捐助过。框架本身相当活跃,每隔大概8个月就有一个大版本。社区也是相当活跃,官方的Community、非官方(StackOverflow)和IRC(据说IRC是比任何一个开源项目都要活跃)基本上你碰到的问题大家都会有解决或者Workout方案。FlaskFLASK框架本身只包含路由分发,请求和响应的封装和插件系统,在加上作者自己的Werkzeug(处理WSGI)、jinja2(模板引擎)和Flask-SQLAlchemy扩展(Model层),这几个同一个作者的项目构成一个完整的MVC框架。对于Flask本身,一个微框架,这已经足够了,而且它也只能提供这么多。如果你需要表单处理,请安装Flask-WTF;如果你需要基于命令的开发模式,请安装Flask-Script和Flask-CLI(这是一个Flask1.0的backport模块);如果你要登陆验证,请装Flask-Login;如果你要后台管理,请装Flask-Admin。什么?!你全部都要?请装Django。对Flask就是这么一个框架。这是一个典型的社区项目,作者在实现了一个牛X的核心以后,就撒手交给社区。各个插件的文档分散(虽然Flask曾经出了一本书,试图打通各个插件和Flask关系,但是当需要真正使用的时候,查文档还是需要在不同的ChromeTab里面切换),而且社区插件的质量、支持和活跃度也需要话很大的力气去确认。Flask这个项目毫无疑问是优秀的:完善的官方文档,详细的教程()还有一个牛X的作者作为光环加持(这里可以看到作者有不少应用广泛的项目)。但是和Django完全不在一个应用层面,我会在下一段作出比较和说明。而且Flask这个项目基本已经处于沉睡期,最新的版本0.10.1是2013年发布的,项目的代码仓库也是比较低的活跃度(大概是一个月10次左右的Commit和PR),1.0的发布从2014年到2016年一直说要发布,一直没有出来。各个插件更新也是停留在2015年中。和Django比较活跃度确实令人捉急。Flask和Django的应用场景鉴于Flask和Django的特点,如果你是开发一个RESTAPI的系统,没有复杂的分层和逻辑的话,Flask会是一个不错的选择,因为框架内建的功能已经足够你完成这个任务;又或者,你是打算实现一个大型的系统,需要自己重新实现大部分插件的内容,Flask也还是不错,因为它足够的简单,能让你快速的读懂和扩展。其他的情况我还是推荐你用回Django。尤其是当你需要安装大量的Flask插件,去实现Django本来就有的功能时,你就应该意识到你需要放弃Flask。当然这只是个人的看法,也没有绝对这一说,主要还是看你想在框架上花费多少的时间。
利用python的flask框架开发智能合约
开发智能合约的框架有很多,比如:
但我是一个pythoner,显然上述都不合适
3.6
ganache是以太坊的本地测试链
web3是一个用于和以太坊交互的python库。
flask的插件,可快速构建restful风格的api
flask的插件,用于序列化/反序列化
启动一个区块链,用于测试智能合约的发布
先查看本地的solidity版本是多少
使用solidity编写智能合约。 solidity是用于编写以太坊智能合约的语言。 编写user.sol文件
官方的版本中要连接 stringUtils 和 主文件 ,因为我是一个菜鸡,不知道怎么导入外部包,所以直接省掉了这部分操作。
合约部署成功以后(仅部署一次即可),然后可以通过flaskapi来做数据 “存”,“取” 操作。