Django(二、静态文件的配置、链接数据库MySQL)

文章目录

  • 一、静态文件及相关配置
      • 1.以登录功能为例
      • 2.静态文件
      • 3.资源访问
      • 4.静态文件资源访问
            • 如何解决?
  • 二、静态文件相关配置
      • 1. 如何配置静态文件配置?
      • 2.接口前缀
      • 3. 接口前缀动态匹配
      • 4. form表单
            • 请求方法补充
            • form表单要注意的点
  • 三、request对象方法
      • request请求结果
            • 代码展示
  • 四、Django连接数据库
      • pycharm连接MySql
      • Django连接MySQL
  • 五、Django ORM简介
      • 基本ORM操作(数据的迁移)
            • 关于数据库迁移失败的原因
      • Django ORM字段增删改查
      • Django ORM数据增删改查

一、静态文件及相关配置

1.以登录功能为例

login.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="../static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="../static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>

<div>
    <div class="container">
        <div class="row">
            <h1 class="text-center">用户登录</h1>
            <div class="col-md-8 col-md-offset-w">
                <form action="">
                    <p>username:
                        <input type="text" class="form-control">
                    </p>
                    <p>password:
                         <input type="text" class="form-control">
                    </p>
                    <input type="submit" class="btn btn-success btn-block" value="用户登录">
                </form>
            </div>
        </div>
    </div>
</div>

2.静态文件

不经常变化的文件,主要针对html文件所使用到的各种资源,比如css文件、js文件、img文件、第三方框架文件

Django针对静态文件资源需要单独开一个目录,统一存放在static文件夹里

static目录   该目录下类型文件居多可再分
	css目录
	js目录
	img目录
	utils目录/plugins目录/libs目录/others目录/不创

3.资源访问

我们在地址栏之所以输入路由获取到相对应的资源,是因为程序员提前开设了资源接口,比如在网址输入127.0.0.1:8000/admin,就能访问对应的接口资源
在这里插入图片描述

4.静态文件资源访问

直接引入css和js是不能直接使用动态效果的,想要静态文件配置添加,添加了bootstrap之前要添加jQuery。

默认情况下无法访问,是因为没有提前开设静态文件资源的访问接口,如图所示
在这里插入图片描述

login能请求成功,是浏览器朝这个网址http://127.0.0.1:8000/login/,这个后端已经开设了访问端口。

请求URL:http://127.0.0.1:8000/static/bootstrap-3.4.1-dist/css/bootstrap.min.css 是在自己的浏览器朝这个网址请求资源,但是后端没有开设端口,所以访问不到资源

如何解决?

理论我们应该在urls填写相对应的关系,但是静态文件太多了,所以Django专门为静态文件开设了一个static文件资源接口

二、静态文件相关配置

1. 如何配置静态文件配置?

首先在setting.py里面找到STATIC_URL = ‘/static/’,在下面配置static所在资源的路径
在这里插入图片描述
相当于把static路径添加到环境变量中去,但是要注意把login.html中的…去掉

2.接口前缀

STATIC_URL = '/static/'  # 访问静态文件资源的接口前缀(通行证)
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),  # 存储静态文件资源的目录名称
    os.path.join(BASE_DIR, 'static1'),  # 存储静态文件资源的目录名称
    os.path.join(BASE_DIR, 'static2'),  # 存储静态文件资源的目录名称
]

"""接口前缀正确之后 会拿着后面的路径依次去到列表中自上而下查找 一旦找到就返回"""

查找顺序
接口前缀>>>接口资源文件(自上而下,找到就截止),接口前缀对了才有资格访问接口文件资源

要是想切换接口前缀呢?

有时候就浏览器会请求临时缓存内容发送我们,我们不可能一个一个去改static,太麻烦了,我们直接动态获取

3. 接口前缀动态匹配

静态文件配置
<link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
<script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>

如果需要改接口前缀的话,需要把上面的静态文件配置改为下面的模板语法(可动态获取)

django提供的模板语法{% load static %},相对于模块。
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>

4. form表单

action      控制数据提交的地址
	1.action=""  数据默认提交当前页面所在的地址
    2.action="https://www.baidu.com/"  完整网址
    3.action="/index"  朝当前服务端的index地址提交

method      控制数据提交的方法
	1.get    默认
    2.post    可以改post  method="post"
    form表单默认get请求  , 朝浏览器发送请求会是敏感数据,要换成post请求,mothed=post
    
请求方法补充

1.get请求 :朝服务端索要数据,也可以携带一些额外的要求。

​ 携带额外数据方式:URL?xxx=yyy&uuu=zzz,但是问号后面携带的数据大小是有限制的(2-8kb),并且不能携带敏感数据(密码)

2.post请求: 朝服务端提交数据

​ 携带额外数据的方式:请求体,请求体携带数据安全性较高并且没有大小的限制。

​ 前期发送post请求需要注释掉配置文件中的某一行

method="post"
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',
]

在这里插入图片描述

form表单要注意的点

1.关于请求方法

2.获取用户标签要加name属性,不加name属性是填写不了

3.修改settings里面的配置

三、request对象方法

理解

request={WSGIReques} <WSGIRequest: GET '/login/'>
两层封装,第一层wsi封装了大字典,第二层是django封装成了方法,返回给我们的是里面含有很多方法

request请求结果

请求方法描述结果
request.method结果是纯大写的字符串数据GET/POST
request.POST获取post请求体里面携带的数据
request.POST.get()获取列表最后一个数值
request.POST.getlist()获取整个列表数据
request.GET获取网址问号后面携带的数值
request.GET.get()获取列表最后的一个数值
request.GET.getlist()获取整个列表数据
代码展示
代码展示
def login(request):
    """
    如果get请求直接返回html页面
    如果是post请求,那么需要获取发送过来的数据
    :param request:
    :return:
    """
    print(request.GET)
    if request.method=='GET':
        # 1.返回html页面
        # print(request.method)  # / GET/POST
        return render(request,'login.html')
    elif request.method=='POST':
        #2.获取post请求体里面的数据
        print(request.POST)   # <QueryDict: {'kimi': ['kimi'], 'pwd': ['123']}>
        name=request.POST.get('name')  # 获取列表最后一个数据值
        pwd=request.POST.get('pwd')
        print(name,type(name),pwd,type(pwd))  # kimi <class 'str'> 123 <class 'str'>
        name1=request.POST.getlist('name')
        print(name1,type(name1))  # ['kimi'] <class 'list'>
        return HttpResponse('数据我收到了')

四、Django连接数据库

pycharm连接MySql

1,pycharm初次连接数据库,都要下载相应的驱动,驱动不行就换驱动,验证的话就是登录用户名(端口和地址) 库名,验证登录就用test connection

三个位置查找数据库相关
	1.右侧上方database
	2.左下方database
	3.配置里面的plugins插件搜索安装
注意:	
	都没有再没有卸载pycharm重新装	

在这里插入图片描述
2.登录管理员账户和密码,连接你需要的数据库(库要提前创建好),在连接之前可以先点击Test Connection 测试连接是一次。注意:在公司不能是管理员的用户登录的!

在这里插入图片描述
3.成功连接成功
在这里插入图片描述

Django连接MySQL

django自带的sqlite3是一个小型的数据库,功能比较少,主要是用于本地测试。实际项目都会替换它的

1.修改配置文件中的数据库设置成Django连接MySQL

django配置文件中默认的是sqlite3数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

django连接MySQL要修改上述配置
1.第一配置文件中配置
DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',   # 修改成MySQL数据库
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),   # 连接数据库名称 先创建好才能指定
        'ENGINE': 'django.db.backends.mysql',   # 修改成MySQL数据库
        'NAME': 'djangodb1',   # 连接数据库名称 先创建好才能指定
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '123',
        'CHARSET': 'utf8'
    }
}
 注意,左边的名字都要大写!!!!

2.手动改动将默认mysqldb改为pymysql
django默认用的是mysqldb模块链接MySQL, 但是该模块的兼容性不好 需要手动改为用pymysql链接,需要指定模块

​ 2.1 django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码

import pymysql
pymysql.install_as_MySQLdb()

​ 2.2 django2.X及以上都可以直接通过下载mysqlclient模块解决

pip3.8 install mysqlclient

该模块windows下载问题不大 主要是mac电脑可能有问题

五、Django ORM简介

ORM:对象关系映射

​ 优点:它能够让不会SQL语句的python程序员,使用python面向对象的语法来操作数据库。

​ 缺点:封装程度太高,有时候sql语句的效率偏低,需要自己写SQL语句。

类             表
对象           一条条数据
对象点名字     数据获取字段对应的值

基本ORM操作(数据的迁移)

1.在models.py中编写模型类

class User(models.Model)
	# 字段名=字段类型+约束条件
    # id int primary_key auto_increment
    id=models.AutoField(primary_key=True)
    # username varchar(32)  # CharField必须要加max_length参数,不加报错
    name=models.CharField(max_length=32)
    # password int
    age=models.IntegerField()

2.执行数据库迁移项目
打开terminal输入命令

# 数据库迁移
python38 manage.py makemigrations   将操作记录到小本本上(migrations)
# 数据库同步到数据库中
python38 manage.py migrate    将操作同步到数据库上

注意:每次在models.py修改了与数据库相关的代码,都需要在执行上述命令

在这里插入图片描述

关于数据库迁移失败的原因

1.一个数据库尽量只对应一个django项目
2.多个Django使用一个数据库,极易容易报错

Django ORM字段增删改查

name = models.CharField(max_length=64)
password1 = models.CharField(max_length=64, null=True)  直接在写一个字段名就行,给它一个默认值

如果要删除的话,直接删掉那一行字段代码就行

增删改查都需要执行两句话:
python38 manage.py makemigrations
python38 manage.py migrate

Django ORM数据增删改查

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云 :推出通义大模型编码助手产品【通义灵码】

本心、输入输出、结果 文章目录 阿里云 &#xff1a;推出通义大模型编码助手产品【通义灵码】前言通义灵码简介主要功能主要功能点 支持的语言和 IDEjetbrains IDEA 安装计费相关弘扬爱国精神 阿里云 &#xff1a;推出通义大模型编码助手产品【通义灵码】 编辑&#xff1a;简简…

SOLIDWORKS --电磁仿真篇

什么是 SIMULIA? 基于3DEXPERIENCE平台的品牌 多学科多领域的协同仿真与分析优化 三大核心仿真领域 结构仿真 流体仿真 SIMULIA电磁仿真是什么? 完备的求解技术&#xff0c;支持从静场、低频到高频、光波的电磁仿真&#xff0c;支持全波仿真、混合仿真、多物理场仿真和场路…

任务管理器的正确使用教程

快捷键 Ctrlshiftesc&#xff1a;进入任务管理器 我以Win11举例 如何给XX排序 给XX排序&#xff0c;点击空白处可以选择某项降序排列&#xff08;可以找到最占用某项资料的程序&#xff09;&#xff0c;再点击空白处可以选择某项升序排列 文件正在使用&#xff0c;如何解决 …

台式电脑怎么无损备份迁移系统到新硬盘(使用傲梅,免费的就可以)

文章目录 前言一、想要将源硬盘上的系统原封不动地迁移到新硬盘上二、准备工作2.具体步骤 总结 前言 半路接手公司一台台式电脑&#xff0c;C盘&#xff08;120g&#xff09;爆红&#xff0c;仅剩几个G&#xff0c;优化了几次&#xff0c;无果后。准备换一个大一点的增到500g。…

Python实现从Labelme数据集中挑选出含有指定类别的数据集

Python实现从Labelme数据集中挑选出含有指定类别的数据集 前言前提条件相关介绍实验环境Labelme数据集中挑选出含有指定类别的数据集代码实现输出结果 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击进入Python日常小…

【STM32 开发】| INA219采集电压、电流值

目录 前言1 原理图2 IIC地址说明3 寄存器地址说明4 开始工作前配置5 程序代码1&#xff09;驱动程序2&#xff09;头文件3) 测试代码 前言 INA219 是一款具备 I2C 或 SMBUS 兼容接口的分流器和功率监测计。该器件监测分流器电压降和总线电源电压&#xff0c;转换次数和滤波选项…

算法打卡01——求两数之和

题目&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你…

Python进行数据可视化,探索和发现数据中的模式和趋势。

文章目录 前言第一步&#xff1a;导入必要的库第二步&#xff1a;加载数据第三步&#xff1a;创建基本图表第四步&#xff1a;添加更多细节第五步&#xff1a;使用Seaborn库创建更复杂的图表关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Pyth…

2023年度API安全状况详解

随着云计算和移动应用的快速发展&#xff0c;API&#xff08;应用程序接口&#xff09;已成为不可或缺的技术组成部分。然而&#xff0c;API的广泛使用也带来了安全风险。本文将探讨2023年的API安全状况&#xff0c;并介绍了一些应对这些安全挑战的最佳实践。 引言 随着全球互联…

【Leetcode】【每日一题】【简单】2609. 最长平衡子字符串

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/find-the-longest-balanced-subs…

在linux安装单机版hadoop-3.3.6

一、下载hadoop https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/core/hadoop-3.3.6/ 二、配置环境变量 1、配置java环境变量 2、配置hadoop环境变量 export HADOOP_HOME/usr/local/bigdata/hadoop-3.3.6 export HBASE_HOME/usr/local/bigdata/hbase-2.5.6 export JA…

C# 继承,抽象,接口,泛型约束,扩展方法

文章目录 前言模拟需求场景模拟重复性高的需求初始类结构继承优化抽象类 需求1&#xff1a;打印CreateTime方法1&#xff1a;使用重载方法2&#xff1a;基类函数方法3&#xff1a;泛型约束方法3.1&#xff1a;普通泛型方法方法3.2&#xff1a;高级泛型约束&#xff0c;扩展方法…

阿里云双11大促,WoSign SSL国密RSA双证书首购4折优惠

阿里云2023双11“金秋云创季”活动盛大开启&#xff01;2023年11月01日至11月31日&#xff0c;阿里云平台WoSign SSL证书“国密/RSA 双证书解决方案”首购4折优惠&#xff01;惊喜折扣、限时福利&#xff0c;机会不容错过&#xff01; 作为阿里云一年一度最盛大的优惠促销活动&…

RAID卡管理工具使用

RAID 基本概念 由于现代数据中心业务量的与日俱增&#xff0c;单台服务器上需要运行的数据也日益增多。当 单个物理磁盘在容量和安全性上不足以支持系统业务时&#xff0c;就需要将多个磁盘以某种特 定方式组合起来&#xff0c;对外作为一个可见的磁盘来使用&#xff0c;才可…

计算机毕业设计 基于Web的视频及游戏管理平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

oracle数据导出exp导入imp

Oracle的exp/imp命令用于实现对数据库的导出/导入操作&#xff1b; exp命令用于把数据从远程数据库服务器导出至本地&#xff0c;生成dmp文件&#xff1b; imp命令用于把本地的数据库dmp文件从本地导入到远程的Oracle数据库。 一、获取帮助信息 exp/imp helpy 二、数据导出 1…

3d max软件中的缓存垃圾该如何清理?

使用3d max建模到渲染操作&#xff0c;来回对效果图调整的次数过多时&#xff0c;就会出现一下看不到的垃圾缓存&#xff0c;影响保存的速度&#xff0c;影响效率&#xff01; 对于这类的3d垃圾清理的有什么高效方法呢&#xff1f; 3dmax垃圾清理的常规操作如下&#xff1a; 1、…

AD9371 官方例程 NO-OS 主函数 headless 梳理(二)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

windows11使用docker部署安装minio

时间 2023-11-08 windows11使用docker部署安装minio 目录 1.docker 下载镜像2.docker安装镜像3.访问控制台4.安装问题解决5.使用教程 1.docker 下载镜像 调整镜像源到国内&#xff0c;否则会很慢 docker pull minio/minio2.docker安装镜像 设置用户名和密码时需要注意&…

开源:特殊的垄断

免责声明&#xff1a;本博客旨在分享我对开源策略的理解和体会&#xff0c;不代表任何组织或机构的立场或观点&#xff0c;也不构成任何商业或投资的建议或担保。本博客的内容可能存在错误或遗漏&#xff0c;也可能随着时间的推移而变得过时或不适用。请在使用或依赖本博客的内…