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

Django5实战

一、安装:

1、安装Django环境:

# 安装
pip install django==5.0.3# 验证 5.0.3
python -m django --version

安装慢的解决方法:使用阿里云的镜像源

pip install -i https://mirrors.aliyun.com/pypi/simple django==5.0.3

2、创建项目:

django-admin startproject mysite

可以看到,创建的目录结构:

mysite/manage.pymysite/__init__.pysettings.pyurls.pyasgi.pywsgi.py

说明:

  1. 最外层的 mysite/ 根目录只是你项目的容器, 根目录名称对 Django 没有影响,你可以将它重命名为任何你喜欢的名称。
  2. manage.py: 一个让你用各种方式管理 Django 项目的命令行工具。你可以阅读 django-admin 和 manage.py 获取所有 manage.py 的细节。
  3. 里面一层的 mysite/ 目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如 mysite.urls).
  4. mysite/__init__.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。如果你是 Python 初学者,阅读官方文档中的 更多关于包的知识。
  5. mysite/settings.py:Django 项目的配置文件。如果你想知道这个文件是如何工作的,请查看 Django 配置 了解细节。
  6. mysite/urls.py:Django 项目的 URL 声明,就像你网站的“目录”。阅读 URL调度器 文档来获取更多关于 URL 的内容。
  7. mysite/asgi.py:作为你的项目的运行在 ASGI 兼容的 Web 服务器上的入口。阅读 如何使用 ASGI 来部署 了解更多细节。
  8. mysite/wsgi.py:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。阅读 如何使用 WSGI 进行部署 了解更多细节。

3、启动服务器:

# 在manage.py同级目录下执行
python manage.py runserver 0.0.0.0:8000

 4、创建应用:

在manage.py 所在的目录下,然后运行这行命令来创建一个应用:

# 创建一个应用
python manage.py startapp polls

编写视图,打开 polls/views.py,把下面这些 Python 代码输入进去:

from django.shortcuts import HttpResponsedef index(request):return HttpResponse("Hello, world. You're at the polls index.")

映射url,在 polls 目录中创建一个 URL 配置,请创建一个名为 urls.py 的文件:

from django.urls import pathfrom . import viewsurlpatterns = [path("", views.index, name="index"),
]

在根URLconf 文件中指定我们创建的 polls.urls 模块。在 mysite/urls.py 文件的 urlpatterns 列表里插入一个 include(), 如下:

from django.contrib import admin
from django.urls import include, pathurlpatterns = [path("polls/", include("polls.urls")),path("admin/", admin.site.urls),
]

函数 include() 允许引用其它 URLconfs。每当 Django 遇到 include() 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。

注意:项目的settings.py中一定要在“INSTALLED_APPS”中把App名称“polls”加进去:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','polls'
]

测试,启动项目,访问http://127.0.0.1:8000/polls/

二、request方法

Django中的请求包含了很多方法,简单认识下:

返回JSON数据:

在Django中,可以使用JsonResponse类来返回JSON数据。

from django.http import JsonResponsedef my_view(request):data = {'key': 'value'}  # 你的数据字典return JsonResponse(data)

 如果你需要返回一个列表或者其他复杂的数据类型,JsonResponse会自动将其序列化为JSON。例如:

from django.http import JsonResponsedef my_view(request):data = [1, 2, 3, 4, 5]  # 你的数据列表return JsonResponse(data, safe=False)

注意,当你传递一个非字典类型的对象时,需要将safe参数设置为False,这样JsonResponse就不会期望传入的是一个字典了。

POST接收axios提交的JSON数据:

login.vue

  axios.post(`django提供的接口地址`, {username: document.getElementById("username").value, password: document.getElementById("password").value}).then((resp) => {console.log(resp);}).catch((error) => {console.log(error);});
};

views.py:

from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
import json@csrf_exempt  # 如果确定不需要CSRF保护可以使用这个装饰器
def login(request):if request.method == 'POST':data = json.loads(request.body)return JsonResponse({'username': data.get("username"), "password": data.get("password")}, safe=False)else:return JsonResponse({'msg': 'xxx'})

三、模板渲染:

在Django中,可以使用Django模板语言(DTL)来渲染模板。以下是一个简单的例子,展示了如何在Django视图中渲染一个模板,并将上下文数据传递给它。

首先,确保在你的Django项目的settings.py文件中配置了模板目录:

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [BASE_DIR / 'templates'],...},
]

然后,创建一个模板文件template_name.html在你的模板目录中:

<!-- templates/template_name.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>My Template</title>
</head>
<body><h1>Hello, {{ name }}!</h1>
</body>
</html>

接下来,在Django视图中渲染这个模板:

# views.py
from django.shortcuts import renderdef my_view(request):context = {'name': 'World'}return render(request, 'template_name.html', context)

在上面的例子中,render函数负责加载模板并使用提供的上下文字典进行渲染。template_name.html模板中的{{ name }}标签将被替换为World,渲染后的HTML将返回给客户端。

也可以在App中创建模板目录然后在App中使用:

1、在App中创建templates目录;

2、在项目的settings.py中,在“INSTALLED_APPS”中把App名称加进去;

3、在App的templates目录中创建模板文件,在Django视图中渲染这个模板。

四、数据库

1、配置数据库连接

配置 settings.py 文件中的 DATABASES:

DATABASES = {'default': {# 数据库引擎,mysql、oracle等'ENGINE': 'django.db.backends.mysql',# 数据库的名字'NAME': 'django_demo',# 连接mysql数据库的用户名'USER': 'root',# 连接mysql数据库的密码'PASSWORD': '123456',# mysql数据库的主机地址'HOST': '127.0.0.1',# mysql数据库的端口号'PORT': '3306',}
}

2、Django 操作数据库

Django 操作数据库方式:

使用原生 SQL 语句操作

使用 ORM 模型来操作

3、Django 使用原生 SQL 语句

SQL 语句操作数据库

# 使用django封装好的connection对象,会自动读取settings.py中数据库的配置信息
from django.db import connection# 获取游标对象
cursor = connection.cursor()
# 拿到游标对象后执行sql语句
cursor.execute("select * from book")
# 获取所有的数据
rows = cursor.fetchall()
# 遍历查询到的数据
for row in rows:print(row)

Python DB API

任何使用 Python 来操作 MySQL 的驱动程序都遵循这个规范。所以不管是使用 pymysql 还是是 mysqlclient ,他们的接口都是一样的。

4、Django 使用 ORM 模型

ORM 模型

ORM,全称Object Relational Mapping,中文叫做对象关系映射,通过ORM我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作实例,把字段作为属性,ORM在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句

ORM模型一般都是放在 app 的 models.py 文件中。每个app都可以拥有自己的模型。并且如果这个模型想要映射到数据库中,那么这个app必须要放在settings.py的INSTALLED_APP中进行安装

创建 ORM 模型

ORM 模型必须继承自django.db.models.Model

ORM 模型映射到数据库中,表名默认是模型名称的小写形式

from django.db import modelsclass User(models.Model):name = models.CharField(max_length=20,null=False)age = models.IntegerField(default=0)birthday = models.DateTimeField(default=datetime.now)

映射 ORM 模型到数据库

在命令行终端,进入到项目所在的路径,然后执行命令 python manage.py makemigrations 来生成迁移脚本文件

执行命令 python manage.py migrate来将迁移脚本文件映射到数据库中。

5、模型字段类型如下

  • AutoField:自增长类型,数据表的字段类型为整数,长度为11位。
  • BigAutoField:自增长类型,数据表的字段类型为bigint,长度为20位。
  • CharField:字符类型。
  • BooleanField:布尔类型。
  • CommaSeparatedIntegerField:用逗号分割的整数类型。
  • DateField:日期( Date)类型。
  • DateTimeField:日期时间( Datetime)类型。Decimal:十进制小数类型。
  • EmailField:字符类型,存储邮箱格式的字符串。
  • FloatField:浮点数类型,数据表的字段类型变成Double类型。IntegerField:整数类型,数据表的字段类型为11位的整数。
  • BigIntegerField:长整数类型。
  • IPAddressField:字符类型,存储Ipv4地址的字符串。
  • GenericIPAddressField:字符类型,存储Ipv4和Ipv6地址的字符串。
  • NullBooleanField:允许为空的布尔类型。
  • PositiveIntegerFiel:正整数的整数类型。
  • PositiveSmallIntegerField:小正整数类型,取值范围为0~32767。
  • SlugField:字符类型,包含字母、数字、下画线和连字符的字符串。
  • SmallIntegerField:小整数类型,取值范围为-32,768~+32,767。
  • TextField:长文本类型。
  • TimeField:时间类型,显示时分秒HH:MM[ :ss[.uuuuuu]]。
  • URLField:字符类型,存储路由格式的字符串。
  • BinaryField:二进制数据类型。
  • FileField:字符类型,存储文件路径的字符串。
  • ImageField:字符类型,存储图片路径的字符串。
  • FilePathField:字符类型,从特定的文件目录选择某个文件。

6、模型字段参数如下:

  • verbose_name:默认为None,在 Admin站点管理设置字段的显示名称。
  • primary_key:默认为False,若为True,则将字段设置成主键。
  • max_length:默认为None,设置字段的最大长度。
  • unique:默认为False,若为True,则设置字段的唯一属性。
  • blank:默认为False,若为True,则字段允许为空值,数据库将存储空字符串。
  • null:默认为False,若为True,则字段允许为空值,数据库表现为NULL。
  • db_index:默认为False,若为True,则以此字段来创建数据库索引。default:默认为NOT_PROVIDED对象,设置字段的默认值。
  • editable:默认为True,允许字段可编辑,用于设置Admin的新增数据的字段。
  • serialize:默认为True,允许字段序列化,可将数据转化为JSON格式。
  • unique_for_date:默认为None,设置日期字段的唯一性。
  • unique_for_month:默认为None,设置日期字段月份的唯一性。
  • unique_for_year:默认为None,设置日期字段年份的唯一性。choices:默认为空列表,设置字段的可选值。
  • help_text:默认为空字符串,用于设置表单的提示信息。
  • db_column:默认为None,设置数据表的列名称,若不设置,则将字段名作为数据表的列名。
  • db_tablespace:默认为None,如果字段已创建索引,那么数据库的表空间名称将作为该字段的索引名。注意:部分数据库不支持表空间。
  • auto_created:默认为False,若为True,则自动创建字段,用于一对一的关系模型。validators:默认为空列表,设置字段内容的验证函数。
  • error_messages:默认为None,设置错误提示。

相关文章:

Django5实战

一、安装&#xff1a; 1、安装Django环境&#xff1a; # 安装 pip install django5.0.3# 验证 5.0.3 python -m django --version 安装慢的解决方法&#xff1a;使用阿里云的镜像源 pip install -i https://mirrors.aliyun.com/pypi/simple django5.0.3 2、创建项目&#…...

网址管理功能 Webstack

前言 在工作生活中大家可能会收集各种网址地址&#xff0c;大部分同学都是通过浏览器标签进行管理。如果你换电脑或者电脑不再身边的时候就有些不方便了。接下来我要向大家推荐一个工具&#xff1a;在线网址导航。 CNS学术导航 大家通过搜索引擎可以很方便的搜索到各种网址导航…...

【热工与工程流体力学】第1章 流体及其主要物理性质,流体的粘性,压缩性,流体的质量力和表面力(西北工业大学)

第1章 流体及其主要物理性质 一、流体力学概述 二、流体力学发展简史 三、本课程的教学计划 四、连续介质模型 五、流体的主要物理性质 六、作用在流体上的力 七、本课程中使用的单位制 一、流体力学概述 1.流体的概念 在任何微小剪应力持续作用下连续变形的物质称为流…...

TCP和UDP区别,各自的应用场景

区别 是否基于链接 TCP是面向连接的协议&#xff0c;发送数据之前需要建立连接&#xff1b;而UDP是无连接的协议&#xff0c;即发送数据之前不需要简历连接。 可靠性和有序性区别 TCP提供交付保证&#xff0c;&#xff08;TCP通过校验和重传控制&#xff0c;序号表示&#xff…...

Java开发工具IDEA

IDEA概述 Intellij IDEA IDEA全称Intellij IDEA&#xff0c;是用于Java语言开发的集成环境&#xff0c;它是业界公认的目前用于Java程序开发最好的工具。 集成环境 把代码编写&#xff0c;编译&#xff0c;执行&#xff0c;调试等多种功能综合到一起的开发工具。 IDEA下载和安…...

VIVADO IP核之DDS直接数字频率合成器使用详解

VIVADO IP核之DDS直接数字频率合成器使用详解 目录 前言 一、DDS基本知识 二、DDS IP核使用之SIN COS LUT only 三、DDS IP核之SIN COS LUT only仿真 四、DDS IP核使用之Phase Generator and SIN COS LUT 五、DDS IP核之Phase Generator and SIN COS LUT仿真 总结 前言 …...

Vue3 插槽 使用笔记

Vue3 插槽 使用笔记 介绍 在 Vue 3 中&#xff0c;插槽&#xff08;Slot&#xff09;是一个非常强大的特性&#xff0c;它允许我们更好地组织和重用组件。通过定义插槽&#xff0c;子组件可以预留出由父组件控制的区域&#xff0c;这样父组件就可以向这些区域填充自己的内容。…...

Vue2与Vue3响应式原理对比

Vue2.x 响应式原理 Vue2.x 响应式&#xff1a; 实现原理 对象类型&#xff1a;通过 Object.defineProperty() 对属性的读取、修改进行拦截( 数据劫持 )数组类型&#xff1a;通过重写数组方法&#xff0c;并作为拦截器挂载到数组对象与数组原型之间&#xff0c;来实现拦截。 存在…...

Android系统Android.bp文件详解

文章目录 1. 基本语法结构2. 常见模块类型3. 模块属性常见属性包括&#xff1a; 4. 具体示例5. 高级功能5.1. 条件编译5.2. 变量定义与使用5.3. 模块继承 6. 总结 Android.bp 是 Android 构建系统&#xff08;Android Build System&#xff09;中的配置文件&#xff0c;用于描述…...

eNSP 华为静态路由配置

R1&#xff1a; <Huawei>system-view [Huawei]sysname R1 [R1]int g0/0/0 //进入g0/0/0端口 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 24 //给端口配置IP地址和子网掩码 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip addr…...

Type-C PD芯片:引领智能充电与数据传输的新时代

随着科技的飞速发展&#xff0c;智能设备已经成为我们日常生活中不可或缺的一部分。无论是智能手机、平板电脑、笔记本电脑&#xff0c;还是智能家居设备&#xff0c;都需要高效、安全、便捷的充电与数据传输解决方案。在这样的背景下&#xff0c;Type-C PD&#xff08;Power D…...

天气查询 免费

免费的前提是需要有高德地图key 前去申请一个key 调用IP查询 | 高德控制台 ------ 申请key之后调用下面的接口或者查看官方文档 api地址&#xff1a; restapi.amap.com/v3/weather/weatherInfo 天气查询-基础 API 文档-开发指南-Web服务 API | 高德地图API 参数名 含义 规…...

VC 与 VS(visual studio) 的对应版本

VC 与 VS 对应版本的关系&#xff1a; VC9&#xff1a;对应的是 Visual Studio 2008 版本。在这个版本中&#xff0c;开发环境提供了一系列的新特性和改进&#xff0c;为开发者提供了更高效的编程体验。例如&#xff0c;增强了对 C 标准的支持&#xff0c;优化了调试工具等。 …...

Qt使用lupdate工具生成.ts文件

Qt提供了lupdate工具&#xff0c;用于从源代码中提取需要翻译的字符串【1】&#xff0c;并生成或更新.ts文件 注解【1】&#xff1a;使用tr()函数&#xff08;或者QCoreApplication::translate()等其他相关的翻译函数&#xff09;来标记所有需要翻译的文本。例如&#xff1a; …...

编程-设计模式 1:工厂方法模式

设计模式 1&#xff1a;工厂方法模式 定义与目的 定义&#xff1a;工厂方法模式定义了一个创建对象的接口&#xff0c;但允许子类决定实例化哪一个类。工厂方法让一个类的实例化延迟到其子类。目的&#xff1a;提供一种方式来封装对象创建的过程&#xff0c;使得客户端不需要…...

Linux 快速构建LAMP环境

目录 部署方式&#xff1a; 基础环境准备&#xff1a; 1.安装Apache服务 &#xff08;1&#xff09;安装Apache &#xff08;2&#xff09;安装一些Apache的扩展包 2.安装PHP语言 &#xff08;1&#xff09;下载php软件仓库 &#xff08;2&#xff09;指定php安装版本…...

【C/C++】语言基础知识总复习

文章目录 1. 指针1.1 数组和指针1.2 函数指针1.3 const 和 指针、static、#define、typedef1.4 指针和引用的异同1.5 sizeof与strlen 2. 库函数及其模拟实现3. 自定义类型4. 数据存储5. 编译链接过程6. C入门基础6.1 函数重载6.2 引用和指针6.3 建议使用const、inline、enum去替…...

【漏洞修复】Tomcat中间件漏洞

1.CVE-2017-12615 抓包上传一句话木马 密码passwd 2.后台弱口令部署war包 先用弱口令登录网站后台 制作war包 将172.jsp压缩成.zip文件&#xff0c;修改后缀为.war 上传 蚁剑链接 3.CVE-2020-1938 Python2 CVE-2020-1938.py IP -p 端口 -f 要读取的文件 漏洞修复&#xf…...

10.动态路由绑定怎么做

为什么要动态路由绑定 因为,如果我们的导航栏没有这个权限,输入对应网址,一样可以获取对应的页面,为了解决这个问题,有两种解决方案,一种是动态路由绑定(导航有多少个,就有多少个路由,在路由修改之前,先进行一个导航路由的加载和路由的动态绑定,然后看是否有这个路由,有就跳转…...

操作ArkTS页面跳转及路由相关心得

本文为JS老狗原创。 当前端不得不关注的点&#xff1a;路由&#xff0c;今天聊一聊鸿蒙相关的一点心得。 总体上套路不意外&#xff0c;基本就是&#xff08;尤其是Web&#xff09;前端那些事&#xff1a;维护路由表、跳转带参数、历史堆栈操作&#xff0c;等等。 历史原因&…...

3大跨平台游戏开发库部署方案:从环境搭建到性能优化的全流程指南

3大跨平台游戏开发库部署方案&#xff1a;从环境搭建到性能优化的全流程指南 【免费下载链接】raylib A simple and easy-to-use library to enjoy videogames programming 项目地址: https://gitcode.com/GitHub_Trending/ra/raylib 跨平台游戏开发库raylib凭借其轻量级…...

终极装备管理革命:TQVaultAE如何彻底改变《泰坦之旅》游戏体验

终极装备管理革命&#xff1a;TQVaultAE如何彻底改变《泰坦之旅》游戏体验 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE TQVaultAE是《泰坦之旅周年纪念版》的终极外部工具…...

SN74181芯片逻辑图解析:从Cn+1进位信号看加法器设计

SN74181芯片逻辑图解析&#xff1a;从Cn1进位信号看加法器设计 在数字电路设计的经典教材中&#xff0c;SN74181算术逻辑单元(ALU)芯片总是占据着重要位置。这款诞生于上世纪60年代的4位ALU芯片&#xff0c;至今仍是理解计算机算术运算基础的绝佳案例。特别是其进位信号Cn1的生…...

如何选择最适合的自动化技术栈:FlaUI与UIA2/UIA3深度解析

如何选择最适合的自动化技术栈&#xff1a;FlaUI与UIA2/UIA3深度解析 【免费下载链接】FlaUI UI automation library for .Net 项目地址: https://gitcode.com/gh_mirrors/fl/FlaUI FlaUI作为一款强大的.NET UI自动化库&#xff0c;提供了对UIA2和UIA3两种技术标准的支持…...

从服务器被黑到主动防御:fail2ban实战部署与多服务防护策略

1. 从一次真实的服务器入侵说起 去年夏天的一个凌晨&#xff0c;我被手机警报声惊醒——自建服务器的CPU占用率飙升至100%。登录管理界面后&#xff0c;发现有个名为kworker的进程持续消耗资源。经过排查&#xff0c;在/tmp目录下发现了伪装成系统文件的挖矿程序&#xff0c;攻…...

Ostrakon-VL-8B终端部署详解:CSS像素级修复+终端打印效果实现原理

Ostrakon-VL-8B终端部署详解&#xff1a;CSS像素级修复终端打印效果实现原理 1. 项目概述与核心价值 Ostrakon-VL-8B是一款专为零售与餐饮场景优化的多模态大模型&#xff0c;我们将其能力封装成了一个具有独特像素艺术风格的Web交互终端。这个终端将复杂的图像识别任务转化为…...

QT开发环境搭建:如何在Linux上快速配置Python和C++支持(含清华镜像源加速)

Linux下高效搭建QT开发环境&#xff1a;Python与C双语言支持实战指南 在Linux系统上搭建QT开发环境是许多跨平台应用开发者的必经之路。不同于Windows或macOS的一键式安装&#xff0c;Linux环境下的配置往往需要处理更多依赖关系和系统级设置。本文将带你从零开始&#xff0c;在…...

忍者像素绘卷保姆级教程:微信小程序云开发+Serverless函数调用忍者API

忍者像素绘卷保姆级教程&#xff1a;微信小程序云开发Serverless函数调用忍者API 1. 项目介绍与准备工作 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工具&#xff0c;它将传统忍者文化与16-Bit复古游戏美学完美融合。本教程将带你从零开始&#xff0c;使用微信小…...

背栓干挂石材幕墙方式之我见

背栓干挂石材幕墙方式之我见干挂石材幕墙的方法有多种&#xff0c;目前国内常见的有短槽式、背栓式、背槽式等。下面就几种方式发表点自己的浅见&#xff0c;希望能对大家有帮助。1、短槽式&#xff08;T型件或蝴蝶件&#xff09;&#xff1a;该方式是在石材上下面开槽&#xf…...

Gumbo-parser内存管理终极指南:7个简单步骤避免常见陷阱

Gumbo-parser内存管理终极指南&#xff1a;7个简单步骤避免常见陷阱 【免费下载链接】gumbo-parser An HTML5 parsing library in pure C99 项目地址: https://gitcode.com/gh_mirrors/gu/gumbo-parser Gumbo-parser是一个纯C99编写的HTML5解析库&#xff0c;高效的内存…...