当前位置: 首页 > news >正文

python中Web开发框架的使用

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 modelsclass 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 Postdef 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 viewsurlpatterns = [path('', views.post_list, name='post_list'),
    ]
    
  3. 连接项目的 urls.py
    在项目的 mysite/urls.py 中,包含应用的 URL:

    from django.urls import include, pathurlpatterns = [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 Flaskapp = 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 DataRequiredclass 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, SubmitFieldapp = 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 开发,需要你自己选择和配置各种库。

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

相关文章:

python中Web开发框架的使用

Python 的 Web 开发框架种类繁多&#xff0c;常见的有 Django 和 Flask 这两个框架。它们各有优点&#xff0c;适合不同类型的 Web 应用开发需求。下面&#xff0c;我将详细介绍这两大主流框架的使用方法&#xff0c;让你快速上手 Python 的 Web 开发。 1. Django Django 是一…...

【AI视频】Runway:Gen-2 运镜详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI视频 | Runway 文章目录 &#x1f4af;前言&#x1f4af;Camera Control&#xff08;运镜&#xff09;&#x1f4af;Camera Control功能测试Horizonta&#xff08;左右平移&#xff09;Vertical&#xff08;上下平移&#xff0…...

Python “函数” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中函数的一些题目&#xff0c;方便学习完Python的函数之后进行一些知识检验&#xff0c;感兴趣的小伙伴可以试一试&#xff0c;含选择题、判断题、实战题、填空题&#xff0c;答案在第五章。 在做题之前可以先学习或者温习一下Python的函数&#xff0c;推荐…...

[产品管理-15]:NPDP新产品开发 - 13 - 产品创新流程 - 具体产品的创新流程:精益生产与敏捷开发

目录 前言&#xff1a;​ 一、集成产品开发IPD模型——集成跨功能团队的产品开发 1.1 概述 1、IPD模型的核心思想 2、IPD模型的主要组成部分 3、IPD模型的实施步骤 4、IPD模型的优点 1.2 基于IPD系统的组织实践等级 1.3 IPD的优缺点 二、瀑布开发模型 1、定义与特点…...

FB仿真模拟PID曲线数据

为了能直观的理解PID的参数调整与曲线数据的变化关系&#xff0c;使用FB写了一个模拟PID曲线数据的程序。 PID类如下&#xff1a; Type PIDController Private : kp_ As Double //比例增益 ki_ As Double //积分增益 kd_ As Double …...

【变化检测】基于ChangeStar建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下&#xff1a; 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、ChangeStar模型训练与预测 4、Onnx运行及可视化 运行环境&#xff1a;Python3.8&#xff0c;torch1.12.0cu113&#xff0c;onnxruntime-gpu1.12.0 likyoo变化检测源码&#xff1a;https://github.c…...

kafka动态认证 自定义认证 安全认证-亲测成功

kafka动态认证 自定义认证 安全认证-亲测成功 背景 Kafka默认是没有安全机制的&#xff0c;一直在裸奔。用户认证功能&#xff0c;是一个成熟组件不可或缺的功能。在0.9版本以前kafka是没有用户认证模块的&#xff08;或者说只有SSL&#xff09;&#xff0c;好在kafka0.9版本…...

航空航司reese84逆向

reese84逆向 Reese84 是一种用于保护网站防止自动化爬虫抓取的防护机制&#xff0c;尤其是在航空公司网站等需要严格保护数据的平台上广泛使用。这种机制通过复杂的指纹识别和行为分析技术来检测和阻止非人类的互动。例如&#xff0c;Reese84 可以通过分析访问者的浏览器指纹、…...

【HTTP】请求“报头”,Referer 和 Cookie

Referer 描述了当前这个页面是从哪里来的&#xff08;从哪个页面跳转过来的&#xff09; 浏览器中&#xff0c;直接输入 URL/点击收藏夹打开的网页&#xff0c;此时是没有 referer。当你在 sogou 页面进行搜索时&#xff0c;新进入的网页就会有 referer 有一个非常典型的用…...

使用sqoop报错

报错一&#xff1a; java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf 这个错误表示在执行与 Hive 相关的操作时&#xff0c;程序无法找 org.apache.hadoop.hive.conf.HiveConf 这个类。这个类是 Hive 的配置类&#xff0c;它用…...

一个简单的基于C语言的HTTP代理服务器的案例

一个简单的基于C语言的HTTP代理服务器的案例。这个代理服务器可以接收客户端的HTTP请求&#xff0c;并将请求转发到目标服务器&#xff0c;然后将服务器的响应返回给客户端。 1. 代理服务器的主要代码 #include <stdio.h> #include <stdlib.h> #include <stri…...

Linux学习-Ansible(二)

基本配置 #主机清单文件 [rootharbor ansible]# cat hostlist [web] 192.168.29.161 192.168.29.162 [es] 192.168.29.171 192.168.29.172 192.168.29.173 #查看所有被管理的主机 [rootharbor ansible]# ansible all --list-hostshosts (5):192.168.29.161192.168.29.162192.1…...

[SDX35]SDX35硬件使用512MB内存,实际只初始化256MB问题分析及解决方案

SDX35 SDX35介绍 SDX35设备是一种多模调制解调器芯片,支持 4G/5G sub-6 技术。它是一个4nm芯片专为实现卓越的性能和能效而设计。它包括一个 1.9 GHz Cortex-A7 应用处理器。 SDX35主要特性 ■ 3GPP Rel. 17 with 5G Reduced Capability (RedCap) support. Backward compati…...

S3C2440中断

一、中断执行的流程 soc中断的执行流程 1、中断源发生中断请求 2、CPU检查该中断是否被屏蔽&#xff0c;以及总中断是否被屏蔽 3、考察中断优先级 4、保护现场 5、执行中断服务函数 6、恢复现场 二、中断初始化 1、设置中断模式&#xff08;INTMOD&#xff09;寄存器(…...

编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动(MinGW版)

参考 GitHub - thecodemonkey86/qt_mysql_driver: Typical symptom: QMYSQL driver not loaded. Solution: get pre-built Qt SQL driver plug-in required to establish a connection to MySQL / MariaDB using Qt. Download qsqlmysql.dll binaries built from official Qt …...

SQLyou基础用法讲解

文章目录 SQLyog 基础知识讲解 1. 数据定义语言 (DDL)创建数据库创建表修改表删除表 2. 数据操作语言 (DML)插入数据批量插入数据更新数据条件更新删除数据条件删除 3. 数据查询语言 (DQL)查询数据查询所有数据使用排序使用聚合函数分组查询使用 HAVING 子句 4. 事务5. 索引创建…...

Can‘t get Kerberos realm

近期封装Ozone客户端&#xff0c;需要走kerberos登陆&#xff0c;遇到了一个问题&#xff0c;花了很长时间解决。记录一下&#xff0c;跟网上能搜到的解决方案不大一样。 先看有问题的代码 Configuration config new Configuration();ConfigurationUtils.setHadoopConfig(conf…...

[python]从零开始的PySide安装配置教程

一、PySide是什么&#xff1f; PySide 是 Qt for Python 项目的一部分&#xff0c;它提供了与 PyQt 类似的功能&#xff0c;使开发者能够使用 Python 编程语言来构建基于 Qt 的图形用户界面 (GUI) 应用程序。PySide 是由 Qt 公司官方维护的&#xff0c;而 PyQt 则是由第三方开发…...

LeetCode[中等] 74.搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…...

overleaf如何下载论文的pdf

用overleaf写完英文论文后&#xff0c;要将论文保存为PDF格式 点击图片中的下载按钮 然后选择一个路径保存论文的PDF格式即可。...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...