静态文件配置 django连接MySQL django模型层初识 ORM基本语句
静态文件配置
1. 问题描述
无法使用本地bootstrap文件搭建CSS页面,只能用CDN。
2. 静态文件
不怎么经常变化的文件 主要针对html文件所使用的到的各种资源
比如bootstrap 的 css js 都是别人写好的 你无需怎么修改
这些就称之为静态文件
比如说img图片文件、第三方插件、第三方框架文件、都是写好之后你不会修改他的,这些都称之为静态文件。
静态文件不能随便放置,它会混淆django的目录结构,所以要放到django指定的目录 >>> static目录
该目录下如果各种类型的文件都多 还可以继续创建目录:
css目录
js目录
img目录
utils目录/plugins目录/libs目录/others目录/不创
3. 资源访问
我们在地址栏中之所以可以属于路由获取到相应的资源是因为程序员提前开设了资源的接口
接口:暂时理解接口就是一个网址,输入这个网址的时候,网址可以返回对应的数据。
查看开发者工具:
这相当于浏览器向这个地址发请求 而在urls.py我们没有开设接口让浏览器访问 如下:
所以要在urls.py开设接口,但是静态文件太多了!不能全部写在这个url列表里。
4. 静态文件资源访问
默认情况下无法访问 因为我们没有提前开设静态文件资源的访问接口
django提供配置,帮助你一键开设静态文件资源的访问接口。
在settings.py下,添加代码:
配置的底层原理:
上面的STATIC_URL = '/static/'
规定了访问静态文件资源的接口前缀(可以理解成通行证)
也就是你写html文件的时候 必须要在链接里修改成/static/
,如下将两个点去掉:
也可以自行修改这个'通行证'的名字STATIC_URL= /xxx/
,但是你的html页面也需要相应的修改(/xxx/
)。
另一部分:STATICFILES_DIRS
就是你本地真实存放静态文件的目录名称。
意味着可以访问下面这个列表中的资源(获得了权限)。获得了进入静态文件目录的资格!
多目录的情况:
接口前缀对了之后, 会把红框中的路径,依次去到列表中的目录,从上往下查找(类似环境变量):
但是这样还是有问题:
写了100个html,产品经理让你换接口前缀的名字。
那要改100个html页面的导入链接:累死了!
所以我们能不能动态匹配接口前缀(通行证):
使用模板语法:
请注意:模板语法是django提供的 并不是在所有地方都能用。
补充开发者工具设置:
当开发者工具打开时,不使用缓存。否则浏览器使用缓存页面,不利于我们实时修改并查看。
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
1.接口前缀
STATIC_URL = '/xxx/' # 访问静态文件资源的接口前缀(通行证)
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # 存储静态文件资源的目录名称
os.path.join(BASE_DIR, 'static1'), # 存储静态文件资源的目录名称
os.path.join(BASE_DIR, 'static2'), # 存储静态文件资源的目录名称
]
'''
接口前缀正确之后 会拿着后面的路径依次去到列表中自上而下查找 一旦找到就返回
'''
2.接口前缀动态匹配
{% 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>
form表单属性补充
action
action控制数据提交的地址
action=""
数据默认提交给当前页面所在的地址action="https://www.baidu.com/"
填写完整地址action="/index/"
朝当前服务端的index地址提交 相当于127.0.0.1:8000/index/
method
method控制数据提交的方法(默认是get,可以改post)
请求方法
get请求
'''get请求'''
朝服务端索要数据 也可以携带一些额外的要求
携带额外数据的方式: URL?xxx=yyy&uuu=zzz
问号后面携带数据的大小是有限制(2KB)的并且不能携带敏感数据 数据会直接暴露
?后面携带的数据的不属于路由 不影响django对路由的匹配
## ps:之前说的网站后缀就是>>>路由
get请求携带额外数据的示例:
不能携带敏感数据:
post请求
'''post请求'''
朝服务端提交数据
携带额外数据的方式: 请求体
请求体携带数据安全性较高并且没有大小限制
前期发送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',
]
不这么做会报错:
ps:这个crsf属于中间件的部分。
示例:
成功接受post请求:
所以我们可以:
针对不同的请求可以做不同的处理!
如果是get请求就返回一个html页面
如果是post请求就获取发送过来的数据
views层 request对象
request.method 获取请求方式 结果是纯大写的字符串数据
GET\POST
request.POST 获取post请求请求体里面携带的数据
request.POST.get() 获取列表最后一个数据值
request.POST.getlist() 获取整个列表数据
request.GET 获取网址问号后面携带的数据
request.GET.get() 获取列表最后一个数据值
request.GET.getlist() 获取整个列表数据
"""
在视图函数中针对不同的请求代码编写套路
if request.method == 'POST':
return HttpResponse()
return HttpResponse()
"""
如何判断浏览器请求??请允许我给你介绍你的对象=。= ---> request对象
每个视图函数都会传入一个request对象,这个对象就对应着之前学习过wsg模块中的大字典。
request经过二层封装 :wsg模块将请求信息封装成大字典 ---> django将大字典封装成对象
request对象内部有很多方法:
下面开始介绍request的常用方法。
request.method
method方法获取请求方式,结果是纯大写的字符串
request.POST
作用是获取post请求体的数据:
request.POST是一个对象,可以当成字典进行操作,并不是所有字典的操作都支持!
request.POST.get()方法,获取列表最后一个数据值,如下只拿到了name列表的最后一个值:
request.POST.getlist():
request.GET
示例:
获取get请求网址后面携带的数据:
查看结果:
pycharm连接数据库
右上角或者左下角找到database按钮:
第一次要下载驱动:
可能的问题:驱动有很多种,无法连接就切换mysql5.1驱动
测试连接 如果不行就换一个驱动:
简单增删:
django连接数据库(记忆)
django自带的sqlite3是一个小型的数据库 功能比较少 主要用于本地测试
我们实际项目中都会替换掉它
默认配置sqlite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
- 修改配置文件
修改成如下:(NAME是数库名、还有用户名密码根据你的mysql自定义)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db1',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123',
'CHARSET': 'utf8'
}
}
修改完settings django服务直接寄了,并提示你:Did you install mysqlclient?这时候需要进行下一步:
2. 需要指定模块
django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码
import pymysql
pymysql.install_as_MySQLdb
django2.X及以上都可以直接通过下载mysqlclient模块解决
pip3.8 install mysqlclient
ps:该模块windows下载问题不大 主要是mac电脑可能有问题
1.x版本:
在这两个init写如上代码
2.x版本:
下载mysqlclient模块 这个模块不同的操作系统 不一定能下载成功 mac电脑可能出问题
修改django源码可以解决:
对象关系映射()
ORM简介
ORM:对象关系映射
能够让不会SQL语句的python程序员 使用python面向对象的语法来操作数据库
类 表
对象 一条条数据
对象点名字 数据获取字段对应的值
ORM由于高度封装了SQL 所以有时候效率较低 我们需要自己写SQL
ORM基本操作
1.现在models.py中编写模型类
class GirlsInfo(models.Model):
# 字段名 = 字段类型 + 约束条件
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField()
2.执行数据库迁移相关命令
python38 manage.py makemigrations 将操作记录到小本本上(migrations)
python38 manage.py migrate 将操作同步到数据库上
'''注意每次在models.py修改了与数据库相关的代码 都需要再次执行上述命令'''
在models.py进行操作。
继承:models元类控制model类产生的对象 我们的表继承models
创建模型类:
执行数据库迁移相关命令:
python38 manage.py makemigrations
迁移记录会存放在migrations:
我们链接的数据库中有可能出现一个记录迁移相关信息的小表。
第二条命令:
python38 manage.py migrate
数据库迁移命令
真正的将models.py的操作同步到数据库中 models中的一个类 对应数据库中的一个表
会一下创建了很多表!有些是django运行需要的表,我们不要动他:
我们在model.py里写的类也会生成一个表,此时会出现在数据库中:
多个应用中表的名字相同时,存储表到数据库不会冲突。
django会自动帮你给表取名。app01_user\app02_user
不同的应用下有不同的前缀。
只要修改models(如下多添加了一个字段),就要迁移数据库。
还可以反向迁移!用表生成类!
ORM基本语句
from app01 import models
models.类名.objects.create()
models.类名.objects.filter()
models.类名.objects.update()
models.类名.objects.delete()
插入数据 create
查询数据 filter
拿到数据对象:
获取数据: 底层还是用execute() 方法
修改数据 update
先筛再修 支持批量修改:
删除数据 delete
静态文件配置 django连接MySQL django模型层初识 ORM基本语句的更多相关文章
- HttpResponse,render,redirect,静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django ORM
HttpResponse 主要用于返回字符串类型的数据 def index(request): return HttpResponse('index页面') 在页面中就会显示 index页面 rend ...
- Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查
本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...
- Django静态文件配置 request对象 Django操作MySQL
Django中的文件介绍 render.HttpResponse和redirect 当我们想起手写一个项目,创建好应用并且注册之后,在urls.py文件先导入app文件夹下migrations下的vi ...
- django之三剑客、静态文件配置、请求响应对象、数据库操作
三剑客 from django.shortcuts import render,HttpResponse,redirect HttpResponse # 返回字符串 render(response, ...
- Django静态文件配置-request方法-ORM简介-字段的增删改查
app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 ...
- Django框架(二)-- 基本配置:app注册、模板配置、静态文件配置、数据库连接配置post和get
一.app 在Django中,APP可以用以下类比 大学 --------------------项目 计算机学院------------app01 土木学院 ------------ app02 1 ...
- Django简介,请求生命周期,静态文件配置
Web框架 Web框架(Web framework)是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方 ...
- Django框架(二)—— 基本配置:app注册、模板配置、静态文件配置、数据库连接配置post和get
目录 app注册.模板配置.静态文件配置.数据库连接配置post和get 一.app 二.模板配置 三.静态文件配置 四.数据库连接配置 五.get请求和post请求 六.新手三件套 七.登录功能案例 ...
- [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...
- Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作
静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...
随机推荐
- Docker容器优雅重启
默认情况下,当 Docker 守护进程终止时,它将关闭正在运行的容器.您可以配置守护程序,以便容器在守护程序不可用时保持运行.此功能称为live-restore.live-restore选项有助于减少 ...
- 努力一周,开源一个超好用的接口Mock工具——Msw-Tools
作为一名前端开发,是不是总有这样的体验:基础功能逻辑和页面UI开发很快速,本来可以提前完成,但是接口数据联调很费劲,耗时又耗力,有时为了保证进度还不得不加加班. 为了摆脱这种痛苦,经过一周的努力,从零 ...
- 我操作MySQL的惊险一幕
背景 前几天因工作需要,组长给我安排了一个数据清洗的任务. 任务:把 A 表的数据洗到 B 表. 我的第一反应,什么是「洗」?洗数据是什么?洗钱我倒是知道. 不过我不能慌啊,于是问了问组长. 我:组长 ...
- 分布式存储系统之Ceph集群CephX认证和授权
前文我们了解了Ceph集群存储池操作相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16743611.html:今天我们来聊一聊在ceph上认证和授权的 ...
- Codeforces 1682 D Circular Spanning Tree
题意 1-n排列,构成一个圆:1-n每个点有个值0或者1,0代表点的度为偶数,1代表点的度为计数:询问能否构成一棵树,树的连边在圆内不会相交,在圆边上可以相交,可以则输出方案. 提示 1. 首先考虑什 ...
- Codeforces Round #816 (Div. 2)/CodeForces1715
CodeForces1715 Crossmarket 解析: 题目大意 有一个 \(n \times m\) 的空间,Stanley 需要从左上角到右下角:Megan 则需要从左下角到右上角.两人可以 ...
- LabVIEW开放神经网络交互工具包【ONNX】,大幅降低人工智能开发门槛,实现飞速推理
前言 前面给大家介绍了自己开发的LabVIEW AI视觉工具包,后来发现有一些onnx模型无法使用opencv dnn加载,且速度也偏慢,所以就有了今天的onnx工具包,如果你想要加载更多模型,追求更 ...
- GlusterFS常用维护操作命令
GlusterFS常用维护操作命令 1.启动/关闭/查看glusterd服务 # /etc/init.d/glusterd start # /etc/init.d/glusterd stop # /e ...
- c++ 关于引用变量你不知道的东西
引用变量延迟绑定 我们知道引用变量定义时要立刻赋值,告诉编译器他是谁的引用.如果不赋值,编译会失败. 如果引用变量是单个定义的,对他赋值还比较简单. struct test_T { int data; ...
- Linux网络通信(TCP套接字编写,多进程多线程版本)
预备知识 源IP地址和目的IP地址 IP地址在上一篇博客中也介绍过,它是用来标识网络中不同主机的地址.两台主机进行通信时,发送方需要知道自己往哪一台主机发送,这就需要知道接受方主机的的IP地址,也就是 ...