一.优缺点对比
Django:
优点:1.大而全,一身装备,可变形,可扩展
2.自助管理后台
3.强大的数据库访问组件
4.完整的路由系统
缺点: 1.高内聚,低耦合
2.重量级
Tornado:
优点:1.高并发、高性能
2.轻量级框架
3.异步非阻塞
缺点:灵活性不太好
Flask:
优点:1.轻量级框架
2.灵活性大
3.完善的官方文档
缺点:开发大型网站整合成本高
二.适用范围
Django:大型网站,快速开发
Tornado:高并发网站
Flask:小型网站
三:请求方式的区分
Django:request.method == "GET" / "POST" 如下例子
# 用户登录
def user_login(request):
if request.method == 'POST':
json_result = json.loads(request.body)
username = json_result.get('username')
password = json_result.get('password')
.....省略
else: # 其他请求方式
return result_handler('请使用POST请求')
Tornado:重写父中RequestHandler的get/post/..的请求处理方法来实现不同的请求方式的区分,如下例子
class UserLogin(tornado.web.RequestHandler):
def get(self):
self.write(result_format(None, msg='此接口不支持GET请求'))
def post(self, *args, **kwargs):
json_result = json.loads(self.request.body)
username = json_result.get('username')
password = json_result.get('password')
.... 省略
Flask:通过注解方式@app.route("/", methods=["get", "post"..]) 如下列子
@app.route('/',methods=['get'])
def hello_world():
searchword = request.args.get('key', '')
return 'Flask 项目创建 %s' % searchword
四:请求参数的接收
Django:request.GET/POST
Tornado:
self.get_query_argument(key)/get_query_arguments(key)
self.get_body_argument(key)/get_body_arguments(key)
self.get_argument(key)/get_arguments(key)
Flask:
request.args.get(key)
request.form.get(key)
五:接口名称配置
Django:在urls.py进行配置,如下:
from django.contrib import admin
from django.urls import path
from user import views
from user.handle.user import UserHandler
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index),
path('login', UserHandler.user_login),
path('logout', UserHandler.login_out),
path('userList', UserHandler.user_list),
path('createAndEdit', UserHandler.createAndEdit),
path('delete', UserHandler.delete_user)
]
Tornado:注册handler
app = tornado.web.Application(handlers=[
(r"/login", UserLogin),
(r"/userList", UserList),
(r"/logout", UserLogout),
(r'/createAndEdit', CreateUser),
(r'/delete', UserDelete)
], debug=True)
Flask:方法注解即可,@app.route('/',methods=['get'])
五.启动方式
Django:运行命令Python manage.py runserver
或者配置启动命令
Tornado:tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[
(r"/login", UserLogin),
(r"/userList", UserList),
(r"/logout", UserLogout),
(r'/createAndEdit', CreateUser),
(r'/delete', UserDelete)
], debug=True)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
Flask:app.run(port=8001)
from flask import Flask, request
app = Flask(__name__)
if __name__ == '__main__':
app.debug = True
app.run(port=8001)