python中常见的5种框架解读

下面是 Python 中常见的 5 种框架的详细解读。

1. Django

Django 是一个由 Python 写成的高级 Web 开发框架,它的核心理念是:"Don't Repeat Yourself"(DRY)。

Django 已经集成了许多常用的功能模块,如:数据库 ORM(Object-Relational Mapping)映射关系、路由系统、表单、用户认证、文件系统处理等,大幅提高了 Web 开发效率。同时,Django 系统化的架构、完善的文档和较好的社区支持,也使得它成为了 Python Web 开发的领军框架。

示例说明:

以一个简单的博客网站为例,使用 Django 框架实现博客 CRUD 操作。我们可以使用 Django 提供的 Model 类定义我们的博客模型,代码如下:

from django.db import models

class Blog(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    create_time = models.DateTimeField(auto_now_add=True)
    modified_time = models.DateTimeField(auto_now=True)

使用 Django,我们只需要定义好模型,就可以使用内置命令 migrate 同步到数据库:

python manage.py migrate

然后,我们可以创建一个视图函数,在该函数中实现博客的添加、修改、删除等功能:

from django.shortcuts import render, get_object_or_404
from .models import Blog
from .forms import BlogForm

def blog_list(request):
    blogs = Blog.objects.all()
    return render(request, 'bloglist.html', {'blogs':blogs})

def blog_detail(request, id):
    blog = get_object_or_404(Blog, pk=id)
    return render(request, 'blogdetail.html', {'blog':blog})

def blog_create(request):
    if request.method == 'POST':
        form = BlogForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('blog_list')
    form = BlogForm()
    return render(request, 'blogcreate.html', {'form':form})

def blog_update(request, id):
    blog = get_object_or_404(Blog, pk=id)
    if request.method == 'POST':
        form = BlogForm(request.POST, instance=blog)
        if form.is_valid():
            form.save()
            return redirect('blog_list')
    form = BlogForm(instance=blog)
    return render(request, 'blogupdate.html', {'form':form})

def blog_delete(request, id):
    blog = get_object_or_404(Blog, pk=id)
    blog.delete()
    return redirect('blog_list')

然后,我们只需要在模板中定义好对应的表单,加载静态文件,就可以访问我们的博客网站了。

2. Flask

Flask 是另一个轻量级的 Python Web 开发框架,其定位是实现简单、灵活且可扩展的 Web 应用。

相对于 Django 的技术栈比较深,需要掌握一定的 ORM、路由系统、静态文件处理等基础知识。Flask 只需要一个核心库和若干扩展库就可以构建一个简单却功能强大的 Web 应用。

示例说明:

以一个简单的博客网站为例,使用 Flask 框架实现博客 CRUD 操作。我们可以使用 Flask 提供的装饰器来定义路由,代码如下:

from flask import Flask, render_template, request, redirect, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField
from wtforms.validators import DataRequired
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SECRET_KEY'] = 'you will never guess'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
db = SQLAlchemy(app)

class Blog(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), nullable=False)
    content = db.Column(db.Text, nullable=False)

@app.route('/')
def blog_list():
    blogs = Blog.query.all()
    return render_template('bloglist.html', blogs=blogs)

@app.route('/blog/<int:id>')
def blog_detail(id):
    blog = Blog.query.get_or_404(id)
    return render_template('blogdetail.html', blog=blog)

@app.route('/blog/create', methods=('GET', 'POST'))
def blog_create():
    form = BlogForm()
    if form.validate_on_submit():
        blog = Blog(title=form.title.data, content=form.content.data)
        db.session.add(blog)
        db.session.commit()
        return redirect(url_for('blog_list'))
    return render_template('blogcreate.html', form=form)

@app.route('/blog/update/<int:id>', methods=('GET', 'POST'))
def blog_update(id):
    blog = Blog.query.get_or_404(id)
    form = BlogForm(obj=blog)
    if form.validate_on_submit():
        form.populate_obj(blog)
        db.session.commit()
        return redirect(url_for('blog_list'))
    return render_template('blogupdate.html', form=form)

@app.route('/blog/delete/<int:id>')
def blog_delete(id):
    blog = Blog.query.get_or_404(id)
    db.session.delete(blog)
    db.session.commit()
    return redirect(url_for('blog_list'))

class BlogForm(FlaskForm):
    title = StringField('标题', validators=[DataRequired()])
    content = TextAreaField('内容', validators=[DataRequired()])

if __name__ == '__main__':
    app.run(debug=True)

3. Pyramid

Pyramid 是一个轻量级的开源 Web 框架,具有简单、可扩展、可重用的特性。Pyramid 的关键特性是它的“纯 Python”性质:框架本身十分简单,重要的功能是通过插件提供的,以此来尽量减轻框架本身的体量。

Pyramid 提供了丰富的工具和库,可以帮助开发者快速构建 Web 应用程序,极大地提高了开发效率。在大型项目中,Pyramid 也是一个非常好的选择,并且性能表现优良。

示例说明:

以一个简单的图书管理系统为例,使用 Pyramid 框架实现图书的信息 CRUD 操作。我们可以使用 SQLAlchemy 提供的对象关系映射功能来定义模型,使用 Pyramids 提供的视图。代码如下:

from pyramid.config import Configurator
from pyramid.response import Response
from sqlalchemy import engine_from_config, Column, Integer, Unicode
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DBSession = sessionmaker()

Base = declarative_base()

class Book(Base):
    __tablename__ = 'book'
    id = Column(Integer, primary_key=True)
    name = Column(Unicode(255), nullable=False)
    author = Column(Unicode(255), nullable=False)
    content = Column(Unicode(1000), nullable=False)

def book_list(request):
    session = DBSession()
    books = session.query(Book).all()
    return {'books':books}

def book_create(request):
    session = DBSession()
    if request.method == 'POST':
        name = request.POST.get('name')
        author = request.POST.get('author')
        content = request.POST.get('content')
        book = Book(name=name, author=author, content=content)
        session.add(book)
        session.commit()
        return Response('添加成功!')
    return {}

def book_update(request):
    session = DBSession()
    if request.method == 'POST':
        book_id = request.POST.get('id')
        name = request.POST.get('name')
        author = request.POST.get('author')
        content = request.POST.get('content')
        book = session.query(Book).get(book_id)
        book.name = name
        book.author = author
        book.content = content
        session.add(book)
        session.commit()
        return Response('修改成功!')
    return {}

def book_delete(request):
    session = DBSession()
    if request.method == 'POST':
        book_id = request.POST.get('id')
        book = session.query(Book).get(book_id)
        session.delete(book)
        session.commit()
        return Response('删除成功!')
    return {}

if __name__ == '__main__':
    settings = {'sqlalchemy.url': 'sqlite:///book.db'}
    config = Configurator(settings=settings)
    config.add_static_view(name='static', path='./static')

    config.add_route('book_list', '/')
    config.add_view(book_list, route_name='book_list', renderer='booklist.html')

    config.add_route('book_create', '/book/create')
    config.add_view(book_create, route_name='book_create', renderer='json')

    config.add_route('book_update', '/book/update')
    config.add_view(book_update, route_name='book_update', renderer='json')

    config.add_route('book_delete', '/book/delete')
    config.add_view(book_delete, route_name='book_delete', renderer='json')

    engine = engine_from_config(settings, prefix='sqlalchemy.')
    Base.metadata.create_all(engine)
    DBSession.configure(bind=engine)
    app = config.make_wsgi_app()
    serve(app, host='127.0.0.1', port=8080)

4. CherryPy

CherryPy 是一个小巧的 Web 框架,当然,瘦身的代价是 CherryPy 没有 Django、Flask 和 Pyramid 那样庞大的生态系统。但是它很轻量级,由于它没有数据库 ORM、HTML 表单等功能模块,所以它的最小化构建版本十分小巧,有利于部署和维护。

CherryPy 支持 HTTP、HTTPS、WSGI、FastCGI、FCGI、SCGI、AJAX、CGI、mod_python 和 pure CGI,并且在源码级别高度模块化,可以方便地按需扩展。

示例说明:

以一个简单的Web服务为例,使用 CherryPy 框架实现对不同 url 的请求响应。代码如下:

import cherrypy

class HelloWorld:
    @cherrypy.expose
    def index(self):
        return "Hello world!"

    @cherrypy.expose
    def welcome(self, name=None):
        if name:
            return "Welcome %s!" % name
        else:
            return "Welcome!"

if __name__ == '__main__':
    cherrypy.quickstart(HelloWorld())

5. Tornado

Tornado 是一个高性能的 Python Web 框架,最初由 FriendFeed 社交网站的开发人员开发。Tornado 最为突出的特点是异步编程。

Tornado 提供了非常强大的网络库,包括 HTTP 客户端和服务器、异步框架、协程库、WebSockets、RPC 等等。

相比于 Flask 和 Pyramid 等 Web 框架,Tornado 具有天然的高并发性,如果需要处理大量请求,Tornado 无疑是一个优秀的选择。

示例说明:

以一个简单的Web服务为例,使用 Tornado 框架实现对不同 url 的请求响应。代码如下:

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

class WelcomeHandler(tornado.web.RequestHandler):
    def get(self, name):
        self.write("Welcome %s!" % name)

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler),
        (r"/welcome/(.*)", WelcomeHandler),
    ])
    application.listen(8080)
    tornado.ioloop.IOLoop.current().start()

到此为止,就是“Python 中常见的 5 种框架解读” 的完整攻略,希望对开发者们有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中常见的5种框架解读 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python中plt.scatter()函数的常见用法小结

    当使用Python进行数据可视化时,常会用到matplotlib这个包。其中的plt.scatter()函数就是用来绘制散点图的。本文将对plt.scatter()函数的常见用法进行小结。 1. plt.scatter()函数的基本用法 plt.scatter()函数的基本语法如下: plt.scatter(x, y, s=None, c=None, mar…

    python 2023年6月3日
    00
  • Python中print函数简单使用总结

    Python 中 print 函数简单使用总结 在Python编程中,常用的一种输出方式就是使用print函数,它可以输出我们希望显示给用户的信息。本文将介绍print函数的用法以及相关参数。 基本使用 print函数的基本使用非常简单,我们只需要使用关键字print后紧跟要输出的内容即可,如下所示: print("Hello, World!&qu…

    python 2023年6月5日
    00
  • Python中的numpy.char.add()函数

    接下来我将详细讲解NumPy库中的numpy.char.add()函数。 函数功能 numpy.char.add() 函数是numpy库中的一个字符串拼接函数,用于将两个字符串按元素级别拼接在一起。 这里的按元素级别(element-wise)指的是将两个字符串在对应位置上的字符,按顺序进行拼接。 函数用法 该函数的语法格式如下: numpy.char.ad…

    python-answer 2023年3月25日
    00
  • Python配置同花顺全数据接口教程详解

    Python配置同花顺全数据接口教程详解 同花顺是国内知名的股票交易软件,其提供了全数据接口(QDII、港股、A股等)供客户端程序调用,但官方并没有提供Python版本的SDK。本文将详细讲解如何使用Python配置同花顺全数据接口,并提供两个示例。 环境准备 在进行配置之前,需要准备好以下环境: Windows系统(本文以Windows 10为例) Pyt…

    python 2023年6月2日
    00
  • 详解Python3 pandas.merge用法

    详解Python3 pandas.merge用法 在数据分析和清洗中,数据合并是极其常见的步骤,而Pandas的merge函数则是最为强大、方便的工具之一。merge函数可以轻松合并两个或多个数据框,并支持非常灵活的合并选项。本文将详细介绍Pandas的merge函数的用法并附带两个基本的示例。 merge函数概述 merge函数用于将两个或多个数据框连接在…

    python 2023年6月2日
    00
  • 使用matplotlib中scatter方法画散点图

    当需要可视化多变量数据时,散点图是常用的一种图形,它可以展示两个或多个变量之间的关系。在Python中,Matplotlib是一个强大的数据可视化库,提供了多种方法用于绘制散点图。 下面是使用Matplotlib中scatter方法画散点图的完整攻略: 导入matplotlib库 import matplotlib.pyplot as plt 准备数据 在绘…

    python 2023年5月19日
    00
  • python socket 超时设置 errno 10054

    Python Socket 超时设置 errno 10054 的解决方案 在使用 Python Socket 编程时,我们可能会遇到超时设置问题,常见的错误码为 errno 10054。这个错误码表示远程主机强制关闭了一个现有的连接。 这个问题可能出现在客户端或服务器端。解决这个问题的方法就是在代码适当的位置设置超时时间,这样可以避免在连接过程中发生不必要的…

    python 2023年5月13日
    00
  • Python生成器generator原理及用法解析

    Python生成器generator原理及用法解析 生成器概述 在 Python 中,生成器(generator)是一种特殊的迭代器,它使得我们可以像使用迭代器一样,像列表一样手动遍历元素,也可以进行循环,但生成器不需要预先将所有元素存储在内存中。 生成器可以通过函数而不是直接定义列表来创建。这样的函数在需要生成值时使用 yield 语句。每次调用这个函数,…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部