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实现的数据结构与算法之链表详解

    下面是详细讲解“Python实现的数据结构与算法之链表详解”的完整攻略,包括链表的定义、链表的基本操作链表的应用和两个示例说明。 链表定义 链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表的头节点指向第一个节点,尾节点指向最后一个节点,如果链表为空,则头节点和尾节点都为None。 链表基本操作 链表的基操作包括插入、…

    python 2023年5月14日
    00
  • Python正则表达式和元字符详解

    Python正则表达式和元字符详解 正则表达式是一种强大的文本处理工具,可以用于各种文本处理,如数据清洗、文本析、信息提取等。在Python中,我们使用re模块提供的函数来操作正则表达式。本攻略将详细讲解Python正则表达式和元字符的用法,包括正则表达式的语法、元字符的含义和示例说明。 正则表达式的语法 正则表达式是一种用于匹配字符串的模式,由普通字符和特…

    python 2023年5月14日
    00
  • python格式化字符串实例总结

    以下是详细讲解“python格式化字符串实例总结”的攻略: 标准格式化字符串 Python中格式化字符串的语法是在字符串中使用”%”占位符。标准的字符串格式化包含类型和转换标志两个部分,语法如下: "格式化字符串" % 值 其中,”格式化字符串”是包含占位符的字符串,%是格式化操作符,后面的值会替代占位符生成新的字符串。占位符有以下类型:…

    python 2023年5月31日
    00
  • python对于requests的封装方法详解

    以下是关于Python对于requests的封装方法的攻略: Python对于requests的封装方法详解 在Python中,我们可以对requests库进行封装,以便更方便地使用。以下是Python对于requests的封装方法详解: 封装GET请求 以下是封装GET请求的示例: import requests def get(url, params=N…

    python 2023年5月14日
    00
  • Python 如何展开嵌套的序列

    展开嵌套的序列就是将一个多层嵌套的序列转化为一个简单的序列。在 Python 中,要展开嵌套序列,可以使用递归函数和迭代器来实现。 递归函数 递归函数是指在函数内部直接或间接调用函数本身的函数。通过递归函数实现展开嵌套的序列,可以使用以下步骤: 创建一个函数,传入一个序列作为参数。 python def flatten(sequence): pass 在函数…

    python 2023年6月3日
    00
  • 在 Ubuntu 18.04 上为 python 安装 mysqlclient 时出错

    【问题标题】:Error installing mysqlclient for python on Ubuntu 18.04在 Ubuntu 18.04 上为 python 安装 mysqlclient 时出错 【发布时间】:2023-04-05 08:26:01 【问题描述】: 我在 Ubuntu 上安装了 Python 2.7.15rci 和 Pytho…

    Python开发 2023年4月5日
    00
  • Python实现for循环倒序遍历列表

    在Python中,可以使用for循环来遍历列表中的元素。有时候,我们需要倒序遍历列表,即从后往前遍历。本文将详细讲解Python实现循环倒序遍历列表的方法。 方法一:使用reversed函数 在Python中,可以使用reversed函数来倒序遍历列表。下面是一个示例: # 示例1:使用reversed函数倒序遍历列表 lst = [1, 2, 3, 4, …

    python 2023年5月13日
    00
  • Python列表的定义及使用

    以下是详细讲解“Python列表的定义及使用”的完整攻略。 在Python中,列表是一种常用的数据类型,可以用来存储一组有序的数据。本文将介绍Python列表的定义及使用,并提供两个示例说明。 定义列表 定义一个列表可以使用方括号[],并在其中添加元素,元素之间用逗号隔开。例如: lst = [1, 2, 3, 4, 5] 上述代码定义了一个包含5个元素的列…

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