网站制作的重要性,软件外包交易平台,百度seo排名规则,wordpress如何加载ppt今日内容 静态文件配置 request对象方法初识 pycharm链接数据库#xff08;MySQL#xff09; django链接数据库#xff08;MySQL#xff09; Django ORM简介 利用ORM实现数据的增删查改
【一】Django小白三板斧 HttpResponse 返回字符串类型的数据 render 返回HTML文…今日内容 静态文件配置 request对象方法初识 pycharm链接数据库MySQL django链接数据库MySQL Django ORM简介 利用ORM实现数据的增删查改
【一】Django小白三板斧 HttpResponse 返回字符串类型的数据 render 返回HTML文件 redirect 重定向
【补充】django自带重启功能
当识别到项目中代码有变化之后 隔段时间会自动重启 但是有时候较慢
【项目的前提条件】
# settings.py
TEMPLATES [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR,app01/templates) ],APP_DIRS: True,OPTIONS: {context_processors: [django.template.context_processors.debug,django.template.context_processors.request,django.contrib.auth.context_processors.auth,django.contrib.messages.context_processors.messages,],},},
]首先让我们创建 app01 应用程序的 urls.py 文件。在你的项目中应该有一个名为 urls.py 的主 URL 配置文件其中包含了所有应用程序的 URL 配置。在这个文件中你需要添加一个路径配置来引入 myapp 应用程序的 URL 配置。
# 项目的 urls.py 文件
from django.urls import include, pathurlpatterns [# 其他路径配置...path(app01/, include(app01.urls)),
]接下来创建 app01 应用程序的 urls.py 文件其中包含了路径配置和视图函数的映射。
# myapp 的 urls.py 文件
from django.urls import path
from . import viewsurlpatterns [path(, views.index_view, nameindex),path(home/, views.home_view, namehome),path(redirect/, views.redirect_view, nameredirect),
] 在 app01 应用程序的 views.py 文件中你可以编写视图函数来处理每个路径的请求。
# app01 的 views.py 文件
from django.shortcuts import render, HttpResponse, redirectdef index_view(request):return HttpResponse(Hello, world!)def home_view(request):return render(request, login_success.html)def redirect_view(request):return redirect(/app01/home/)
【二】静态文件
我们将html文件默认都凡在templates文件夹下
我们将网站所使用的静态文件默认都放在static文件夹下
【1】什么是静态文件 前端已经写好了的 能够直接调用使用的文件 网站写好的js文件网站写好的css文件网站写好的图片文件第三方前端框架…拿来就可以直接使用的 django默认是不会自动帮你创建static文件夹 需要你自己手动创建 一般情况下我在static文件夹内换回做进一步的划分处理 –static –js–css–img其他的第三方文件 在浏览器中输入url能够看到对应的资源 是因为后端提前开设了该资源的借口 如果访问不到资源 说明后端没有开设该资源的借口 http://127.0.0.1:8000/static/bootstrap-3.3.7-dist/css/bootstrap.min.css
【二】在Django配置静态文件
在Django的默认静态文件渲染系统中默认的文件访问位置为当前APP的静态文件 在settings.py文件中 # 默认的静态文件配置
STATIC_URL /static/在app 下创建一个static文件夹 创建一个子分类文件夹 访问静态文件http://127.0.0.1:8000/static/avatar/1.jpg 在页面上可以渲染出当前静态文件
第一种
如果想访问到项目目录下指定文件夹内容的静态文件
因为我将static文件夹放在个django文件是同一级文件夹下因此我的默认的配置文件如下
# 默认的静态文件配置
STATIC_URL /static/# 添加配置条件
STATICFILES_DIRS [os.path.join(BASE_DIR, rF:\PicGo\djangoProject\static),
](http://127.0.0.1:8000/static/photos/21.jpg) 第二种
# 第一步
# 在前端页面中的第一行
# {% load static %}# 第二步使用静态文件
# {% static static/phots/21.jpg %}!-- login.html --
{% load static %}
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
{# script srchttps://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js/script#}link href{% static js/bootstrap-theme.min.css %} relstylesheet{# script srchttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js/script#}
/head
body
h1 class text-center登陆/h1
div classcontainerdiv classrowdiv classcol-md-8 col-md-offset-2form action methodpostpusername:input typetext nameusername classform-control/pppassword:input typepassword namepassword classform-control/pinput typesubmit classbth btn-block/form/div/div
/div
/body
/htmlform action methodpostform表单action参数 不写 默认当前所在的url提交是数据全写 指名姓名只写后缀 /login/
在前期我们使用Django提交post请求的时侯 需要取配置文件中注释掉一行代码
# !-- 在settings.py文件中 --
MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,# django.middleware.csrf.CsrfViewMiddleware,django.contrib.auth.middleware.AuthenticationMiddleware,django.contrib.messages.middleware.MessageMiddleware,django.middleware.clickjacking.XFrameOptionsMiddleware,
]【三】request对象方法
【1】request.method
获取到当前请求方式
【2】request.GET
获取到get请求携带的请求参数
# 请求参数携带在路由地址上以键值对的形式携带
http://127.0.0.1:8000/register/?usernamepasswordhobbymusichobbysporthobbyswimrequest.GET.get(key)
# 获取键值对数据(单个的键值对数据)request.GET.getlist(key)
# 获取GET请求携带的列表数据(一个键多个值的数据)
# hobbymusichobbysporthobbyswim【3】request.POST
获取POST请求携带的请求体
# 请求数据携带在请求体重并且在路由地址上看不到form表单提交 post 请求时会报错
# 解决办法注释掉 middleware中带有 CSRF 参数的中间件
# CSRF verification failed. Request aborted.【三】pycharm链接数据库MySQL 三个位置查数据库相关的 右侧上方的database左下方database配置里面的plugins插件搜索安装不行就卸载安装 pycharm可以充当很多款数据库软件的客户端 【配置】
要在 Django 中连接 MySQL 数据库你需要进行以下步骤 确保你已经安装了 MySQL 数据库并且知道数据库的连接信息例如主机名、用户名、密码和数据库名称。 在 Django 的项目设置文件 settings.py 中找到 DATABASES 配置项并进行如下修改
# settings.pyDATABASES {default: {ENGINE: django.db.backends.mysql,NAME: bai, # 你的数据库名字USER: root, # 一般来说就是rootPASSWORD: 12186, # 忘了就要百度HOST: 127.0.0.1, # 默认为 localhostPORT: 3303, # 默认为 3306 }
}请将 your_database_name、your_username、your_password、your_host 和 your_port 替换为你的 MySQL 数据库的实际连接信息。
你直接使用会出现以下错误 这个错误提示是在 Django 中连接 MySQL 数据库时出现的。它指出无法加载 MySQLdb 模块可能是因为没有安装 mysqlclient。
如果你还没有安装 mysqlclient 库请在终端中运行以下命令安装
# pip install mysqlclient这是一个用于连接 MySQL 数据库的 Python 库。
安装这个mysqlclient库需要运气 win 电脑给力一点安装就不会报错 mac系统安装 mysqlclient 费劲
win报错解决办法
访问 whl文件的官网https://pypi.org/project/mysqlclient/#files
# pip install mysqlclient-2.2.4-cp310-cp310-win_amd64.whl运行数据库迁移命令以创建 Django 所需的数据库表
# python manage.py migrate 这将根据你的 models.py 文件创建数据库表。
现在你的 Django 项目应该能够连接到 MySQL 数据库了。你可以在你的应用程序的 models.py 文件中定义模型并使用 Django 的 ORM (对象关系映射) 功能与数据库交互。
以下是一个简单的示例展示了如何在 Django 中连接 MySQL 数据库和定义一个简单的模型
# models.pyfrom django.db import modelsclass Book(models.Model):title models.CharField(max_length100)author models.CharField(max_length100)publication_date models.DateField()def __str__(self):return self.title 在这个示例中我们创建了一个名为 Book 的模型它有三个字段title、author 和 publication_date。__str__ 方法定义了模型对象的字符串表示形式。
确保在定义模型后运行以下命令以将模型更改应用于数据库
# python manage.py makemigrations
# python manage.py migrate【四】Django链接MySQL
【1】Django自带的数据
在 settings.py 文件中有一个配置项就是配置数据库的但是Django默认的数据库是sqlite3数据库
DATABASES {default: {ENGINE: django.db.backends.sqlite3, # 修改sqlitesNAME: BASE_DIR / db.sqlite3,}
}将上图中黄色警告缺少驱动程序文件下载就是傻瓜模式 【五】Django中的ORM操作
【1】什么是ORM
ORM. 对象就是关系映射
ORM 的基本思想是将数据库表映射为对象
【2】作用
能够让一个不用sql语句的小白也能通过python 面向对象的代码简单快捷的操作数据库不知之处
封装程度太高有时候sql语句的效率偏低需要你自己写SQL语句
# 类 表
# 对象 记录
# 对象属性 记录某一个字段对应的值
【3】ORM 的优点包括
简化数据库操作ORM 提供了高级的抽象层使开发人员无需直接编写复杂的 SQL 查询语句而是使用简单的方法和语法来执行数据库操作。提高开发效率ORM 可以减少开发人员的工作量提供了便捷的方式来处理数据库减少了手动编写 SQL 语句的时间和错误。跨数据库支持ORM 框架通常支持多种数据库后端使开发人员能够在不同的数据库系统之间切换而无需更改大量的代码。数据库独立性通过使用 ORM应用程序的数据库访问逻辑与具体的数据库实现解耦使得应用程序更容易迁移到不同的数据库系统上。更好的可维护性ORM 提供了一种结构化的方式来管理数据库操作使得代码更易于理解、维护和扩展。
【4】建表操作
【1】定义模型表
在自己的应用程序的文件如app01下面的models.py文件中定义模型表
from django.db import models# Create your models here.# 建表 : 数据库中的表映射为Python中的类
class User(models.Model):# 数据库中的字段映射为Python中的属性# 定义一个用户名 字符串类型 长度 # MySQL中字符串类型的字段 char varchar(32)# CharField 字符串类型的字段# max_length 最大长度# verbose_name 注释# help_text 解释username models.CharField(max_length32, verbose_name用户名, help_text这是一个用户名字段)password models.CharField(max_length32)# IntegerField : 相当于MySQL中的 int 字段age models.IntegerField()# FloatField : 相当于MySQL数据库中的 float 字段salary models.FloatField() 一旦你定义了模型你可以使用 Django 的数据库迁移工具来创建数据库表。迁移工具会根据模型的定义自动生成相应的 SQL 语句并将其应用到数据库中。你可以使用以下命令进行数据库迁移
python manage.py makemigrations # 生成迁移文件
python manage.py migrate # 应用迁移文件创建数据库表 这样Django ORM 将会根据你的模型定义创建一个名为 User 的数据库表该表包含了 username、password 、salary和 age 四个个字段。 默认数据库
在 settings.py 文件中有一个配置项就是配置数据库的但是Django默认的数据库是sqlite3数据库
DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,}
}指定数据库
修改 settings.py 中的数据库配置项模版
DATABASES {default: {ENGINE: django.db.backends.mysql,# 数据库名字NAME: , # 如 bai# 数据库用户名USER: , # 一般是 root# 数据库密码PASSWORD: , # 忘了就拜拜# 数据库 IP本地默认是127.0.0.1/localhostHOST: localhost,# 数据库端口PORT: 3306, # 可以查看自己数据库文件夹中的min文件# 数据库编码CHARSET: utf8mb4,}
}【2】指定MySQL数据库报错
先创建一个新的数据库 django 默认使用mysqldb模块链接mysql但是该模块的兼容性不好需要手动修改为pymysql链接
1解决办法一猴子补丁
在项目下的 __init__ 或者任意的应用名下的 __init__ 文件中书写一下代码
import pymysqlpymysql.install_as_MySQLdb()2解决办法二下载第三方模块
直接安装
pip install mysqlclient运气好不会报错但是运气不好就会报错
3Win报错解决办法(下载whl文件)
https://pypi.org/project/mysqlclient/#files 下载对应的whl版本文件安装(切换到指定目录下执行 pip 安装命令)
pip install pip mysqlclient-2.2.4-cp310-cp310-win_amd64.whl【3】ORM操作之字段操作
https://docs.djangoproject.com/en/3.2/topics/db/
这个是django数据库语句的官网
【1】字段属性
1允许为空
在定义模型类的相应字段时可以为该字段添加 nullTrue 属性以允许其值为 None 或空字符串。
class MyModel(models.Model):name models.CharField(max_length50, nullTrue) # 允许name字段为空2指定默认值
设置字段的默认值可通过在字段定义时附加 default 参数实现。例如给字段 age 设置默认值为 18
class MyModel(models.Model):age models.IntegerField(default18) # 默认年龄为18岁【2】字段增加
要在 Django 模型表中增加新的字段只需在相应的 Model 类中添加新字段及其类型和所需属性。
from django.db import modelsclass MyModel(models.Model):name models.CharField(max_length50) created_at models.DateTimeField(auto_now_addTrue) # 新增一个自动记录创建时间的datetime字段is_active models.BooleanField(defaultTrue) # 新增一个布尔类型字段默认激活状态为True【3】字段删除
要从模型表中删除字段请直接在 Model 类中注释掉该字段或者将其完全移除。不过在生产环境中删除字段前请确保不会影响现有数据因为这可能导致数据丢失或结构不一致。
class MyModel(models.Model):name models.CharField(max_length50) created_at models.DateTimeField(auto_now_addTrue) is_active models.BooleanField(defaultTrue) # 移除is_removed字段【补充】
每次修改关于数据库字段的操作时都要执行数据库的迁移相关操作
python manage.py makemigrations
python manage.py migrate【六】ORM操作之数据操作
【1】增加
1语法
模型表名.objects.create(字段名字段值)2示例
new_instance MyModel.objects.create(name张三, age25,emailzhangsanexample.com
)【2】查询
1语法
获取到当前表中的全部数据
模型表名.objects.all()根据指定条件筛选数据
# 方式一
模型表名.objects.get(筛选字段名筛选字段值)# 方式二
模型表名.objects.filter(筛选字段名筛选字段值)去除指定条件的数据
模型表名.objects.exclude(筛选字段名筛选字段值)2示例
# 获取表中所有数据
all_records MyModel.objects.all()# 根据特定条件筛选数据方式一
filtered_records MyModel.objects.get(name张三)# 根据特定条件筛选数据方式二
# 查询包含张的所有name
filtered_records MyModel.objects.filter(name__contains张) # 去除满足指定条件的数据
# 过滤掉所有年龄小于18岁的记录
excluded_records MyModel.objects.exclude(age__lt18) 【3】更改
1语法
# 方式一先查询直接修改
模型表名.objects.filter(筛选字段名筛选字段值).update(修改字段名修改字段值)# 方式二先查询后修改
obj 模型表名.objects.get(筛选字段名筛选字段值)
obj.修改字段名修改字段值
obj.save()2示例
# 可以使用.filter() 和 .update() 方法批量更新符合条件的数据
# 所有年龄为25的记录年龄改为26
MyModel.objects.filter(age25).update(age26) # 更新已有记录的值可先通过查询获取对象实例后调用 .save() 方法
instance_to_update MyModel.objects.get(name张三)
instance_to_update.age 26
instance_to_update.save()【4】删除
1语法
# 方式一删除需要先查询直接删除
模型表名.objects.filter(筛选字段名筛选字段值).delete()# 方式二删除需要先查询再删除
instance_to_delete MyModel.objects.get(筛选字段名筛选字段值)
instance_to_delete.delete()2示例
# 删除满足特定条件的记录通常先通过查询获取对象实例再调用 .delete() 方法
instance_to_delete MyModel.objects.get(name张三)
instance_to_delete.delete()# 可以使用 .filter() 方法批量删除
MyModel.objects.filter(name李四).delete() # 删除所有名字为李四的记录常用的操作语法
在Django中ORM对象关系映射提供了一种便捷的方式来执行数据库操作。ORM允许您使用Python代码而不是SQL语句来操作数据库。下面是一些常见的ORM操作语法创建对象
new_object MyModel(field1Value 1, field2123)
new_object.save()读取对象
all_objects MyModel.objects.all() # 获取所有记录# 根据条件过滤记录
filtered_objects MyModel.objects.filter(field1Value 1)# 获取单个记录
single_object MyModel.objects.get(pk1)更新对象
object_to_update MyModel.objects.get(pk1)
object_to_update.field1 New Value
object_to_update.save()删除对象
object_to_delete MyModel.objects.get(pk1)
object_to_delete.delete()聚合操作Aggregation
from django.db.models import Count, Sum, Avg# 计算记录总数
count MyModel.objects.count()# 对字段进行求和
total MyModel.objects.aggregate(Sum(field2))# 对字段进行平均值计算
average MyModel.objects.aggregate(Avg(field2))排序
# 按字段升序排序
sorted_objects MyModel.objects.order_by(field1)# 按字段降序排序
sorted_objects MyModel.objects.order_by(-field1)关联查询
class RelatedModel(models.Model):my_model models.ForeignKey(MyModel, on_deletemodels.CASCADE)# 获取关联模型的记录
related_objects RelatedModel.objects.select_related(my_model)# 获取关联模型的记录并预先加载
related_objects RelatedModel.objects.prefetch_related(my_model) 这些是常见的ORM操作语法示例。Django的ORM还提供了更多高级的查询和操作方法如跨表查询、事务管理等。https://docs.djangoproject.com/en/3.2/topics/db/
ggregation
from django.db.models import Count, Sum, Avg# 计算记录总数
count MyModel.objects.count()# 对字段进行求和
total MyModel.objects.aggregate(Sum(field2))# 对字段进行平均值计算
average MyModel.objects.aggregate(Avg(field2))排序
# 按字段升序排序
sorted_objects MyModel.objects.order_by(field1)# 按字段降序排序
sorted_objects MyModel.objects.order_by(-field1)关联查询
class RelatedModel(models.Model):my_model models.ForeignKey(MyModel, on_deletemodels.CASCADE)# 获取关联模型的记录
related_objects RelatedModel.objects.select_related(my_model)# 获取关联模型的记录并预先加载
related_objects RelatedModel.objects.prefetch_related(my_model) 这些是常见的ORM操作语法示例。Django的ORM还提供了更多高级的查询和操作方法如跨表查询、事务管理等。https://docs.djangoproject.com/en/3.2/topics/db/