Django --- 与数据库进行交互 1.静态文件配置 2.get请求和post请求 3.request方法初始 4.pycharm连接数据库 5.django连接Mysql 6.django ORM简介 7.模型表字段的增删改查 8.模型表数据的增删改查

默认情况下所有的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查询出来的列表中所有的对象全部删除