python中常见的5种框架解读

yizhihongxing

下面是 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面向对象编程之类的继承

    Python面向对象编程之类的继承 什么是类和对象 在Python中,我们可以通过定义类(class)和创建对象(object)来完成面向对象的编程。类是一种抽象的概念,它是对具有相同属性和方法的对象进行封装和抽象后得到的结果。对象则是类的一个具体实例,有着自己的属性和方法。 什么是继承 继承是指在现有的类的基础上创建新的类,新的类拥有原有类的属性和方法。子…

    python 2023年6月6日
    00
  • python中partial()基础用法说明

    Python中partial()基础用法说明 Python中的partial函数是一个非常有用的函数,可以帮助我们基于现有的函数,创建新的函数。它可以理解为“部分应用”一个函数,就是将部分参数传入一个函数,但并不立即执行它,而是返回一个新的函数,这个新函数可以继续接收剩余的参数,并最终返回结果。 它的基本语法 下面是partial函数的基本语法格式: fun…

    python 2023年6月5日
    00
  • 详解Python中的format格式化函数的使用方法

    请看下方的完整攻略。 详解Python中的format()格式化函数使用方法 在Python中,字符串格式化是一项非常重要的操作。一个常用的字符串格式化函数是format()。format()函数可以让我们更加灵活地控制字符串的输出格式。 基本使用方法 在Python中,我们可以使用花括号{}来表示需要进行替换的部分,然后使用format()函数来进行替换。…

    python 2023年6月5日
    00
  • 解决Python报错:ValueError:operands could not be broadcast together…

    解决Python报错:ValueError:operands could not be broadcast together… 在Python中,当我们进行数组运算时,可能会遇到“ValueError: operands could not broadcast together…”的报错。这个报错通常是由于数组的形状不匹配致的。本攻略将介绍如何解决这…

    python 2023年5月13日
    00
  • 基于python编写的shell脚本详细讲解

    基于Python编写的Shell脚本详细讲解 什么是Shell脚本 Shell是Linux/Unix操作系统下的命令解释器,是用户与操作系统之间的接口。Shell脚本就是在这个解释器中使用Shell语言编写的可执行脚本文件。Shell脚本可以实现系统自动化任务、软件安装部署、文件管理等一系列操作,提高了工作效率并减少了人为操作出错的风险。 Python中执行…

    python 2023年6月3日
    00
  • python用户自定义异常的实例讲解

    下面是关于“Python用户自定义异常的实例讲解”的完整攻略。 什么是用户自定义异常? 在Python中,异常是一种在程序执行过程中出现的错误或意外情况。Python内置了许多异常类,例如IOError、TypeError,等等。当程序出现异常时,可以捕获并处理异常,避免程序异常终止。 除了使用内置的异常类外,Python还允许用户自定义异常类。通过定义自己…

    python 2023年5月13日
    00
  • pytorch 如何查看数据类型和大小

    在 PyTorch 中,可以使用 .dtype 和 .size() 两个函数来查看数据类型和大小。下面是具体的步骤: 查看数据类型 可以使用 .dtype 函数来查看 Tensor 的数据类型,具体步骤如下: 通过加载PyTorch库和创建一个张量,如下代码所示: import torch x = torch.ones(2, 3) 这里创建了一个大小为 $2…

    python 2023年6月2日
    00
  • 使用LRU加速python应用

    操作系统 :CentOS 7.6.1810_x64 Python 版本 : 3.9.12 一、背景描述 使用python开发过程中,会遇到需要使用缓存加速应用的情况,比如下面这些场景: 数据转换加速 字符串时间转换成int时间戳; 字符串时间转换成datetime类型; … 数据解析加速 bytes数据转换为int(数据包解析场景的端口、序列号等); b…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部