Django --- 与数据库进行交互
1.静态文件配置
默认情况下所有的html文件都是放在template文件夹内
1.什么是静态文件
静态就是提前已经写好了,网站中所使用到的提前写的css,js,第三方的前端模块,图片 都叫做静态资源
默认情况下网站所用到的静态文件资源全部都会放在static文件夹下,
通常情况下,在static文件夹内布还会再建其他文件夹
css 文件夹
js 文件夹
font 文件夹
img 文件夹
Bootstap
fontawesome
为了更加方便的管理文件
django中给需要自己创建static文件夹,新建在project文件下
视图函数都必须有返回值,返回的都是HttpResponse对象
2.为什么用户在浏览器中输入的网址能够访问到响应的资源?有时候不能访问?
能访问到相应资源的前提是后端提前开设该资源的访问,如果我的后端没有开设相关的资源,用户是无法访问到的
3.如果想要访问静态资源怎么做?
对后端的相关资源进行开放,.如果想要访问静态资源,必须去ursl里面开设对应的接口,但是如果需要进行访问的静态资源很多,一个一个修改太麻烦了,所以可以直接在django的settings配置文件中进行配置,之后重启django,如果还是没有效果,清除一下页面缓存。
STATIC_URL = '/static/'①
static:指的是访问静态文件资源接口前缀
STATIC_URL:静态网址
4.手动开设静态文件访问资源
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]②
staticfiles_dirs:静态文件目录
5.关于两个static的联系
1.①指的是访问静态文件资源接口前缀,②指的是静态资源所在的文件夹路径
2.接口前缀的意义:如果你想访问我的静态资源,你就必须要按照我写的 ①接口前缀(STATIC_URL)内容开始,如果你的是按照我的接口前缀开始的,就让你在 ②静态文件目录(STATICFILES_DIRS)中寻找你需要的静态文件,②中的static表示的是你可以寻找静态资源的路径。
注意:
1.在写需要访问的静态资源的时候,必须精确到具体的文件,否则无法访问。
2.②中的static可以也可以使用别的文件,寻找的时候按照从上向下的顺序来查找需要的静态文件。
3.①中的static跟文件夹路径没有一点关系
6.如果想要更改很多个接口前缀,使用什么方法?
静态文件的动态绑定:
<% load static %>
<script src="{%static 'jquery/3.4.1/jquery.min.js' %}"></script>
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/css/bootstrap.css' %}">
<script src="{% static 'bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
此时不管我的接口前缀怎么更改,我都可以跟html中需要查询静态文件的开始部分对应上,不用再一个一个进行更改。
2.get请求和post请求
1.from表单
action=" "
1.不写参数,默认朝当前地址提交数据
2.只写后缀,后缀指的是端口后边的部分
3.写全路径
mothod:POST/GET
enctype="multipart/form-data" 提交文件
2.get请求
from表单默认是get请求,可以携带参数
特点:url/?xxx=xxx&yyy=yyy
1.携带的数据不安全
2.携带的数据大小是有限制的,最大在4k左右
3.通常只会携带一些不是很重要的数据
4.GET参数通过URL传递,POST放在Request body中
3.注意点:
在向后端提交POST请求的时候,如果出现403报错,进行下边的操作
MIDDLEWARE = [# 'django.middleware.csrf.CsrfViewMiddleware',]
# 将这一行注释掉, MIDDLEWARE:中间件
djanjo后端的视图函数默认使用的是GET请求,无论是发GET请求还是POST请求,都会执行视图函数
GET请求:向服务器要资源,请求指向拿到login页面
POST请求:向服务器提交数据,请求想提交数据,然后后端做校验
3.request方法初始
request.mothed # 获取请求方式,并且纯大写的字符串
**************************
request.POST # 获取用户提交的post请求数据
# 获取用户数据
request.POST.get() # 默认只会获取列表最后一个元素
request.POST.getlist() # 按照列表的行式返回
**************************
request.GET # 获取用户提交的get数据
# 获取用户数据
request.GET.get() # 默认只会获取最后一个元素
request.GET.getlist() # 按照列表行式返回
4.pycharm连接数据库
连接的时候必须有的两步操作
1.配置文件配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 指定数据库类型
'NAME': 'day49', # 指定库的名字
'USER':'root', # 注意 键必须是全大写
'PASSWORD':'123qwe',
'HOST':'127.0.0.1',
'PORT':3306,
'CHARSET':'utf8'
}}
2.主动告诉django,不要使用默认的mysqldb连接,而是用pymysql
1.可以在项目名下的__init__.py中书写
2.也可以在应用名下的__init__.py中书写
import pymysql
pymysql.install_as_MySQLdb()
5.django连接Mysql
6.django ORM简介
ORM:对象关系映射
类 表
对象 字段数据
对象.属性 字段对应的值
1.为什么使用orm
能够让不会数据库操作的人也能够简单方便的去操作数据库
2.ORM缺点
封装程度太高,有时候会出现查询效率偏低的问题
3.django中如何操作ORM
书写模型类
去应用下的model.py中书写模型类(就是类)
********
#注意点:之后在写django项目中,一个djanjo就对应一个数据库,不要出现多个项目使用同一个数据的情况
4.ORM的使用
创建表
# 注意点:
# 1.django会自动帮你创建一个主键,默认是id,如果自己指定了主键,会使用自己指定的
# 2.django中默认没有char字段,但是支持用户自定义
# 3.CharField必须有max_length参数
from django.db import models
class User(models.Model):
id = models.AutoField(primary_key=True)
username = models.CharField(max_length=255)
password = models.CharField(max_length=32)
数据库迁移命令
****************************************************************************
>>> python manage.py makemigrations # 将数据库中的修改记录到(migration文件内)
# 执行完之后,不会直接同步到数据库中,
>>> python manage.py migrate # 将表在数据库中进行创建
只要修改了models里面跟数据库相关的代码,就必须重新执行上面的两条命令
7.模型表字段的增删改查
# 改:直接更改表中的内容,再进行数据库迁移的两条命令
# 增:
# 方式1:设置默认值
email = models.EmailField(default='123@qq.com')
# 方式2:允许字段为空
phone = models.BigIntegerField(null=True)
# 方式3:直接在提示中给默认值
gender = models.CharField(max_length=32)
# 删:将表重新更新一下,再执行库迁移的两条命令
切记:进行数据库信息更改的时候,一定要注意不要弄错了,更改的时候一定要小心小心再小心
8.模型表数据的增删改查
模型表数据的增删改查(******)
查
data = models.User.objects.filter(username=username) # <QuerySet [<User: User object>]>
"""
filter返回的结果是一个"列表",里面才是真正数据对象
filer括号内可以放多个关键字参数 这多个关键字参数在查询的时候 是and关系
"""
user_list = models.User.objects.all() # models.User.objects.filter()
"""
结果是一个"列表" 里面是一个个的数据对象
"""
增
user_obj = models.User.objects.create(username=username,password=password)
print(user_obj,user_obj.username,user_obj.password)
# create方法会有一个返回值 返回值就是当前被创建的对象本身
改
models.User.objects.filter(id=edit_id).update(username=username,password=password)
"""
批量操作 会将filter查询出来的列表中所有的对象全部更新
"""
删(一般情况下不会使用)
models.User.objects.filter(id=delete_id).delete()
"""
批量操作 会将filter查询出来的列表中所有的对象全部删除
Django --- 与数据库进行交互的更多相关文章
- python学习笔记--Django入门三 Django 与数据库的交互:数据建模
把数据存取逻辑.业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller (MVC)模式.在这个模式中, Model 代表数据存取层,View 代表的是系统中 ...
- python django 与数据库的交互
下载没有任何问题的mysqdb http://www.codegood.com/archives/4 1创建一个新的app. python manage.py startapp books 2 激活a ...
- Django模型-数据库操作
前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...
- django模型——数据库(二)
模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...
- Django之 数据库ORM
一.ORM Django的 业务 少不了 跟数据库打交道,不然没有数据库保存一些数据将是一件很糟糕的事情.Django 对 数据库 支持原生的 SQL语句,但更好的对数据库支持,Django自己有一套 ...
- 第二章、Django以及数据库的配置
目录 第二章.Django以及数据库的配置 一.小白必会三板斧 二.静态文件配置 三.form表单 action和method参数可以写的形式 四.request对象及方法 五.django连接数据库 ...
- django 操作数据库--orm(object relation mapping)---models
思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...
- Django: 之数据库导入、迁移和联用
Django 数据库导入 从网上下载的一些数据,excel表格,xml文件,txt文件等有时候我们想把它导入数据库,应该如何操作呢? 以下操作符合 Django版本为 1.6 ,兼顾 Django 1 ...
- Django查询数据库性能优化
现在有一张记录用户信息的UserInfo数据表,表中记录了10个用户的姓名,呢称,年龄,工作等信息. models文件 from django.db import models class Job(m ...
随机推荐
- [转帖]ARM发布Ethos-N57/N73 NPU、Mali-G57 Valhall GPU和Mali-D37 DPU
ARM发布Ethos-N57/N73 NPU.Mali-G57 Valhall GPU和Mali-D37 DPU https://www.cnbeta.com/articles/tech/902417 ...
- Object 方法的 hashCode,equals方法源码
文章目录 hashCode方法注释 equals 方法注释 equals 方法 hashCode方法注释 Object 的 hashCode 方法,是本地方法: Returns a hash code ...
- Linux基础-09-磁盘分区、挂载及文件系统管理
1. 硬件设备与文件名的对应关系 1) 在Linux系统中,每个设备都被当初一个文件来对待. 2) 各种设备在Linux中的文件名 2. 硬盘的结构及硬盘分区 1) 为什么要进行硬盘分区: a) 更容 ...
- SQL——UPDATE(改)
一.UPDATE语句基本用法 UPADTE语句用于修改表中已存在的记录. UPDATE语句语法: UPDATE 表名 SET 列名1 = 值1,列名2 = 值2... WHERE 条件语句; 演示st ...
- Python之推导式笔记
观察下面的代码: list1 = [] for i in range(10): list1.append(i) print(list1) 作为一个Java出身的程序员,我一定会这么写代码去生成一个列表 ...
- 【模拟】Clock
Clock 题目描述 wls有一个钟表,当前钟表指向了某一个时间.又有一些很重要的时刻,wls想要在钟表上复现这些时间(并不需要依次复现).我们可以顺时针转动秒针,也可以逆时针转动秒针,分针和时针都会 ...
- Scratch编程:游泳的火柴人(四)
“ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一个手绘的火柴人在水里游泳. ...
- mybatis执行DDL语句
对MyBatis一直停留在仅仅会用的阶段,常用的场景就是通过MyBatis对表数据进行DML(insert, delete, update等)操作,从来没有想过通过MyBatis对数据库进行DDL(c ...
- python入门-windows下anaconda环境搭建
1. anaconda下载 根据根据自己系统下载32位还是64位,还有版本 python3.6——64bit python3.6——32bit python2.7——64bit python2.7—— ...
- 【转载】 C#中PadRight函数以特定字符在字符串结尾补足位数
在C#开发过程中字符串String类处理过程中,有时字符串长度不够时,需要在右侧侧指定特定的字符来补足字符串长度,此时可以使用String类下的PadRight方法对字符串结尾按特定的字符补足位数.M ...