python中Web开发框架的使用

news2024/9/18 22:31:29

Python 的 Web 开发框架种类繁多,常见的有 DjangoFlask 这两个框架。它们各有优点,适合不同类型的 Web 应用开发需求。下面,我将详细介绍这两大主流框架的使用方法,让你快速上手 Python 的 Web 开发。


1. Django

Django 是一个功能齐全、强大且高效的全栈 Web 开发框架,适合快速开发复杂的 Web 应用。它内置了很多功能,如 ORM(对象关系映射)、表单处理、用户认证、模板引擎等。

Django 安装

首先,你需要通过 pip 安装 Django:

pip install django
创建一个 Django 项目
  1. 创建项目
    使用 django-admin startproject 命令创建一个新项目。

    django-admin startproject mysite
    
  2. 启动开发服务器
    进入项目目录,启动 Django 的开发服务器。

    cd mysite
    python manage.py runserver
    

    打开浏览器,访问 http://127.0.0.1:8000/,你将看到 Django 的欢迎页面。

创建一个 Django 应用

在 Django 中,项目由多个应用组成。应用是功能模块,可以独立运行。

  1. 创建应用

    python manage.py startapp blog
    

    这将在项目目录下创建一个名为 blog 的应用文件夹。

  2. 注册应用
    打开项目的 settings.py 文件,找到 INSTALLED_APPS,将新创建的 blog 应用添加进去:

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'blog',  # 注册新应用
    ]
    
定义模型 (Model)

Django 的模型是定义数据库表的方式。假设你想创建一个博客文章模型。

  1. models.py 中定义模型

    from django.db import models
    
    class Post(models.Model):
        title = models.CharField(max_length=200)
        content = models.TextField()
        created_at = models.DateTimeField(auto_now_add=True)
    
  2. 创建数据库迁移
    Django 使用迁移来管理数据库模式。首先,创建迁移文件:

    python manage.py makemigrations
    
  3. 应用迁移
    应用迁移,将模型映射到数据库:

    python manage.py migrate
    
创建视图 (Views)

视图是处理请求并返回响应的逻辑。

  1. views.py 中定义视图

    from django.shortcuts import render
    from .models import Post
    
    def post_list(request):
        posts = Post.objects.all()
        return render(request, 'blog/post_list.html', {'posts': posts})
    
  2. 设置 URL 路由
    blog 应用下创建一个 urls.py 文件并添加路由:

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.post_list, name='post_list'),
    ]
    
  3. 连接项目的 urls.py
    在项目的 mysite/urls.py 中,包含应用的 URL:

    from django.urls import include, path
    
    urlpatterns = [
        path('blog/', include('blog.urls')),
        path('admin/', admin.site.urls),
    ]
    
模板 (Templates)

Django 使用模板来渲染 HTML 页面。

  1. 创建模板文件
    blog 文件夹下创建一个 templates/blog/post_list.html 文件,填入以下内容:
    <!DOCTYPE html>
    <html>
    <body>
        <h1>Blog Posts</h1>
        <ul>
            {% for post in posts %}
                <li>{{ post.title }} - {{ post.created_at }}</li>
            {% endfor %}
        </ul>
    </body>
    </html>
    

现在访问 http://127.0.0.1:8000/blog/,你会看到博客文章列表展示在页面上。


2. Flask

Flask 是一个轻量级的 Web 框架,适合小型应用或 API 开发。与 Django 相比,Flask 更灵活,但需要你自行选择和配置许多工具和库。

Flask 安装

通过 pip 安装 Flask:

pip install Flask
创建一个简单的 Flask 应用
  1. 创建 Flask 项目
    在项目目录下创建一个名为 app.py 的文件,写入以下代码:

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def home():
        return "Hello, Flask!"
    
    if __name__ == '__main__':
        app.run(debug=True)
    
  2. 运行 Flask 项目
    在终端中运行:

    python app.py
    

    打开浏览器,访问 http://127.0.0.1:5000/,你会看到页面显示 “Hello, Flask!”。

路由和视图

Flask 使用装饰器定义路由。

  1. 定义路由和视图
    你可以根据 URL 创建不同的视图:

    @app.route('/hello/<name>')
    def hello(name):
        return f"Hello, {name}!"
    
  2. 动态路由
    Flask 支持动态 URL,你可以使用变量捕获 URL 参数。

    @app.route('/user/<username>')
    def show_user_profile(username):
        return f"User {username}"
    
模板 (Templates)

Flask 使用 Jinja2 作为模板引擎,允许动态生成 HTML。

  1. 创建模板目录
    在项目目录下创建一个名为 templates 的文件夹,并在其中创建 index.html 文件:

    <!DOCTYPE html>
    <html>
    <body>
        <h1>Hello, {{ name }}!</h1>
    </body>
    </html>
    
  2. 渲染模板
    修改 app.py,使用 render_template() 函数渲染模板:

    from flask import render_template
    
    @app.route('/hello/<name>')
    def hello(name):
        return render_template('index.html', name=name)
    
  3. 访问
    现在访问 http://127.0.0.1:5000/hello/Flask,你会看到页面显示 “Hello, Flask!”。

表单处理

你可以使用 Flask-WTF 来处理表单输入。

  1. 安装 Flask-WTF

    pip install Flask-WTF
    
  2. 表单示例

    from flask_wtf import FlaskForm
    from wtforms import StringField, SubmitField
    from wtforms.validators import DataRequired
    
    class NameForm(FlaskForm):
        name = StringField('What is your name?', validators=[DataRequired()])
        submit = SubmitField('Submit')
    
  3. 表单视图
    创建表单视图并处理表单提交:

    from flask import Flask, render_template, redirect, url_for
    from flask_wtf import FlaskForm
    from wtforms import StringField, SubmitField
    
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'secret!'
    
    class NameForm(FlaskForm):
        name = StringField('What is your name?')
        submit = SubmitField('Submit')
    
    @app.route('/form', methods=['GET', 'POST'])
    def form():
        form = NameForm()
        if form.validate_on_submit():
            return redirect(url_for('hello', name=form.name.data))
        return render_template('form.html', form=form)
    

总结

  • Django 是一个全功能的框架,适合快速开发复杂的 Web 应用,特别是当你需要使用强大的后台管理界面、ORM 和用户身份验证时。
  • Flask 是一个轻量级框架,更灵活,适合较小的项目和 API 开发,需要你自己选择和配置各种库。

无论选择哪个框架,关键是根据项目需求和个人喜好,灵活运用这些工具进行开发。如果你想要更详细的代码示例或遇到任何问题,随时问我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2142550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络安全 | PHP代码审计】熊海cms

原创文章,禁止转载。 文章目录 环境搭建代码审计文件包含漏洞SQL注入漏洞1SQL注入漏洞2SQL注入漏洞3SQL注入漏洞4SQL注入漏洞5SQL注入漏洞6XSS漏洞1XSS漏洞2垂直越权CSRF1CSRF2逻辑漏洞环境搭建 https://down.chinaz.com/soft/36930.htm解压并重命名: 修改配置(php版本需…

【Git】将本地项目上传到git | 在IDEA的提交记录中更改 提交的用户名

一:将本地项目上传到git 1:在​gitee​上创建以自己项目名称命名的空项目【注意项目名称与本地项目的文件夹名称一致】 2:进入想上传的项目的文件夹,然后右键点击 3:查看用户名及邮箱 $ git config user.name $ git config user.email4: 配置你的用户名及邮箱【如果有…

Git:Git管理

目录 Git 文件管理检测文件状态 status跟踪新文件 add提交更新 commit撤销提交 Commit Git 校验和历史查看 log版本回退 resetgit 忽略文件 Git 分支管理Git 提交对象Git master分支Git 分支管理本地分支管理远程分支管理分支hotfix处理 Git 工作流常见分支冲突处理分支合并冲突…

形象化展示numpy.stack

https://numpy.org/doc/stable/reference/generated/numpy.stack.html#numpy.stack 1. 一维数组 import numpy as npa np.arange(4) b np.arange(4) c np.stack([a,b]) d np.stack([a,b], axis1) print(a -->, a.shape,:\n, a) print(b -->, b.shape,:\n, b) print…

ICM20948 DMP代码详解(25)

接前一篇文章&#xff1a;ICM20948 DMP代码详解&#xff08;24&#xff09; 上一回讲到了inv_icm20948_load_firmware函数&#xff0c;对于大体功能进行了介绍&#xff0c;本回深入其具体实现代码细节。为了便于理解和回顾&#xff0c;再次贴出相关代码&#xff1a; //Setup Iv…

【个人博客hexo版】hexo安装时会出现的一些问题

项目场景&#xff1a; 项目场景&#xff1a;在完成了GitHub仓库和git的连接之后&#xff0c;就要新建一个文件夹&#xff08;例如hexo blog&#xff09;进行下一步hexo的使用 问题描述 例如&#xff1a;如图所示 原因分析&#xff1a; 这些error不用看它到底是什么&#xf…

Chrome谷歌浏览器登录账号next无反应

文章目录 问题描述 我们的Chrome浏览器在更新之后&#xff0c;会出现登录谷歌账号的时候&#xff0c;当你输入你的谷歌邮箱之后&#xff0c;点击 n e x t next next,也就是下一步的时候&#xff0c;页面没有反应&#xff0c;也就是没有跳转到输入密码的页面。 分析 根据logs里…

CLIP模型也能处理点云信息(论文复现)

CLIP模型也能处理点云信息&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 CLIP模型也能处理点云信息&#xff08;论文复现&#xff09;概述模型结构模型总览图点云的投影视图间适配器 演示效果零样本投影少样本投影 核心逻辑使用方式部署…

Mamba环境配置教程【自用】

1. 新建一个Conda虚拟环境 conda create -n mamba python3.102. 进入该环境 conda activate mamba3. 安装torch&#xff08;建议2.3.1版本&#xff09;以及相应的 torchvison、torchaudio 直接进入pytorch离线包下载网址&#xff0c;在里面寻找对应的pytorch以及torchvison、…

VTD激光雷达(5)——05_OptiX_GPU

文章目录 前言一、总结 前言 一、 1 2 3 总结

随着访问范围的扩大 OpenAI o1-mini 现已向免费用户开放

上周&#xff0c;OpenAI 展示了其最新的大型语言模型&#xff08;LLM&#xff09;–OpenAI o1及其小兄弟 OpenAI o1-mini。该公司在公告中称&#xff0c;Plus 和 Team 用户可在公告发布之日起访问该模型。企业和教育用户将在本周获得该模型&#xff0c;而免费用户最终将获得 o1…

线性代数之QR分解和SVD分解

文章目录 1.QR分解Schmidt正交化Householder变换QR分解的应用 2. 求矩阵特征值、特征向量的基本方法3.SVD分解SVD分解的应用 参考文献 1.QR分解 矩阵的正交分解又称为QR分解&#xff0c;是将矩阵分解为一个正交矩阵Q和一个上三角矩阵R的乘积的形式。 任意实数方阵A&#xff0c…

2022高教社杯全国大学生数学建模竞赛C题 问题一(1) Python代码

目录 问题 11.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析数据探索 -- 单个分类变量的绘图树形图条形图扇形图雷达图Cramer’s V 相关分析统计检验列联表分析卡方检验Fisher检验绘图堆积条形图分组条形图分类模型Logistic回归随机森林import matplotlib…

SpaceX实现人类首次商业太空行走:航天历史新篇章

导语 2023年9月&#xff0c;SpaceX成功完成了人类历史上首次商业太空行走&#xff0c;这不仅是航天领域的重要突破&#xff0c;也是商业航天的一次重大胜利。这一事件标志着普通人离太空更近了一步&#xff0c;为未来的太空探索和火星移民奠定了基础。 一、背景介绍&#xff1a…

【MySQL】数据类型【mysql当中各自经典的数据类型的学习和使用】

目录 数据类型1数据类型分类2.数值类型2.1tinyint类型2.2bit类型2.3小数类型2.3.1float2.3.2decimal 3.字符串类型3.1char3.2varchar3.3char和varchar的对比 4.日期和时间类型5.enum和set5.1对enum和set进行插入5.2对enum和set进行查询 数据类型 数据类型本身就是mysql当中天然…

YOLOv8 的安装与训练

YOLOv8 是 YOLO 系列实时目标检测器中的较新迭代版本&#xff0c;在准确性和速度方面提供了前沿性能。基于之前 YOLO 版本的进步&#xff0c;YOLOv8 引入了新的特性和优化&#xff0c;使其成为各种应用中各种目标检测任务的理想选择。 一、安装显卡驱动与CUDA&#xff1a; 这个…

成都院干翻华东院成第一水电设计院!

注&#xff1a;文章来源于百度。版权归原作者所有。。 昨天中国电建发布了2024年中报&#xff0c;一般中报我是不怎么研究的&#xff0c;除非利益相关。 但今年电建的中报亮点很多&#xff0c;其中最显眼的就要数电建成都院在上半年干翻了传统龙头老大——华东院。 在净利润…

【C++】一次rustdesk-server编译记录

RustDesk Server 是一个开源的远程桌面解决方案&#xff0c;允许用户自托管自己的远程桌面服务器。该项目是免费且开源的&#xff0c;支持多种平台和环境。RustDesk Server 提供了 ID/Rendezvous 服务器和 Relay 服务器&#xff0c;以及一些 CLI 工具&#xff0c;方便用户进行远…

[Redis] Redis中的set和zset类型

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

动手学深度学习8.5. 循环神经网络的从零开始实现-笔记练习(PyTorch)

本节课程地址&#xff1a;从零开始实现_哔哩哔哩_bilibili 本节教材地址&#xff1a;8.5. 循环神经网络的从零开始实现 — 动手学深度学习 2.0.0 documentation (d2l.ai) 本节开源代码&#xff1a;...>d2l-zh>pytorch>chapter_multilayer-perceptrons>rnn-scratc…