扩大
缩小
人生本来就短暂,为什么还要栽培苦涩。
返回顶部

django基础之orm

静态文件

什么是静态文件

网站所使用到的提前已经写好的文件
css
js
第三方文件
bootstrap
sweetalert
fontawesome
	都称为静态文件

注意:

网站所使用到的html 文件统一放到templates 文件夹中
那针对网站所使用到的静态文件也应该单独找一个文件夹来存储
	这个文件夹 默认情况下都叫static
	该文件夹需要手动自己创建
	并且该文件夹内部通常是以下结构
    static
		-css
			网站所用到的所有的css文件
		-js
			网站所用到的所有的js文件
		-image
			网站所用到的所有的图片文件
		第三方文件
        
Static files (CSS, JavaScript, Images)
https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = '/static/'  # 访问后端静态资源的接口前缀  默认情况下接口前缀名与静态文件名保持一致
用户在浏览器接口之所以输入网址能够拿到对应的资源,是因为后端开设了相关的资源

django静态文件配置

django静态文件配置

django 在配置文件中给你显示了配置文件的配置信息,你只需要按照固定的写法书写
即可显示对应的静态文件资源。

基本配置

STATIC_URL = '/static/'  # 访问后端静态资源的接口前缀  默认情况下接口前缀名与静态文件名保持一致
"""
<link rel="stylesheet" href="/xxx/bootstrap-3.3.7-dist/css/bootstrap.min.css">
你要想访问后端的静态资源 你必须以接口前缀开头 后面跟上具体的文件路径 才能够访问到对应的资源

当你的接口前缀正确之后  会拿着后面的路径依次去下面列表中的每一个文件夹下查找对应的资源
顺序是从上往下依次查找 如果都没有找到才会报错
"""
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),  # 这里的static才是你文件夹的路径
    os.path.join(BASE_DIR, 'static1'),
    os.path.join(BASE_DIR, 'static2'),
]

添加对应的资源

1578128396476

两者必须一一对应

1578104401992

添加后的执行顺序

1578104598836

如何解决动态绑定的问题

{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>

1578104942582

form表单

form表单默认是以get请求提交数据的

http://127.0.0.1:8000/login/?username=admin&password=123

action的使用

1.不写 默认朝当前地址提交数据
2.全路径
3.后缀(/index)

提交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',
			]

1578129532037

1578105562053

get和post的请求

视图函数应该做到针对不同的请求 做出不同的处理逻辑

eg:
	get请求来 应该只需要返回一个html文件
	post请求来 应该获取用户提交的数据 然后做进一步处理
	注意:
你必须要能够判断出当前请求到底是什么请求

request对象

获取前端请求方式

request.method  # 结果是一个纯大写的字符串  GET/POST
			
request.POST  # 获取post请求提交的数据     类似于是一个大字典
				# <QueryDict: {'username': ['admin', 'jason'], 'password': ['123']}>
	request.POST.get()  # 只会取列表最后一个元素
	request.POST.getlist()  # 取出整个列表
request.GET  # 获取符合get请求携带数据格式的数据 url?xxx=yyy&ooo=lll
				# <QueryDict: {'username': ['admin', 'jason'], 'password': ['123']}>
	request.GET.get()  # 只会取列表最后一个元素
	request.GET.getlist()  # 取出整个列表

get和post的两种逻辑判断方式

def login(request):
		# 要给用户返回一个登陆页面
		# print('我被触发了')
		# 获取前端请求方式
		# if request.method == 'GET':
		#     # get逻辑
		#     return render(request, 'login.html')
		# elif request.method == 'POST':
		#     # post逻辑
		#     # print(request.method,type(request.method))  # GET <class 'str'>  POST <class 'str'>
		#     # 获取数据 之后...
		#     return HttpResponse('收到了你的数据 马上处理')
		"""为了减少代码的层级:一般情况下视图函数处理get请求较多 所以可以直接再函数体内先写get请求对应的逻辑
		将其他请求利用request.method做出区分
		"""
		if request.method == 'POST':
			return HttpResponse('收到了')
		return render(request,'login.html')

django链接MySQL

需要你自己提前创建好对应的库 才能链接数据库

1.先去配置文件中配置相关参数

DATABASES = {
				'default': {
					'ENGINE': 'django.db.backends.mysql',  # 数据库类别
					'NAME': 'day49',  # 库的名字
					'HOST':'127.0.0.1',
					'PORT':3306,
					'USER':'root',
					'password':'123',
					'CHARSET':'utf8'
				}
			}

2.在项目名或者应用名下面的__init__文件中告诉django使用pymysql链接数据库而不是用默认的mysqldb

import pymysql
pymysql.install_as_MySQLdb()

django ORM简称

django ORM不会帮你创建数据库,需要我们自己手动创建表

orm 的对象关系映射

类                                表

对象                            记录

属性                            字段值


作用:

能够让一个不会数据库的小白也能够通过 python面向对象语法,以点的方式来简单快捷的操作数据库。

1578112152090

怎么用django 操作MySQL

首先需要到指定应用下的models.py中书写我们的模型类(对象)

models.py
		class User(models.Model):
			# id int primary key auto_increment
			id = models.AutoField(primary_key=True)
			# name varchar(32)
			name = models.CharField(max_length=32)
			# password int
			password = models.IntegerField()

1578137078058

1578137087431

如果我们在创建表时,为了防止重名,所以系统会自动生成一个后缀名 如图。

1578137221499

数据库迁移(同步)命令***********

回顾:(同步异步)

同步(串行)

如果两个啊a,b程序都要提交并执行,假如a先提交执行任务,b必须等待a执行结束后,才能提交任务。

异步:(并发)

如果两个a,b程序都要提交并执行时,假如a先提交并执行时,b无需要等待a执行结束,就可以直接提交任务。

数据库迁移值代码:

1.python3 manage.py makemigrations #就是就你对数据库的改动记录放到一个文件夹里,通俗一点就是放在一个记事本上(migrations迁移 到文件夹)
2.python3 manage.py migrate  # 将改动真正的同步到数据库中

注意

上面两个命令永远是成对出现的 只要你执行了1 就必须要执行2

*********只要你动了models.py跟数据库相关的代码 你就必须要重新执行上面的两条命令来保证数据库与models.py一致***********

字段的增删改查

字段的增

1.要么给字段设默认值
2.要么运行字段为空

1578135853241

字段的查

自己查看表

字段的改

修改models代码 之后执行数据迁移命令即可
1.python3 manage.py makemigrations  # 仅仅是将你对数据库的改动记录到某个小本本上(migrations文件夹)
2.python3 manage.py migrate # 将改动真正的同步到数据库中

字段的删

只要注释掉对应的字段 执行数据库迁移命令就会将对应的字段及数据信息全部删除(慎用)

1578136337531

对数据的增删改查

对数据的查

1.filter()
1.filter()
	from app01 import models
	res = models.User.objects.filter(username='jason')  #相当于select * from user where username='jason'# 返回的结果是一个列表  支持索引取值但是不支持负数并且不推荐使用 推荐你使用它给你封装好的方法
	user_obj = res.first()# filter方法条件不存在的时候 不会报错返回的是一个空列表
	"""
	filter括号内直接放多个关键字参数 并且多个关键字参数之间是and关系
	res = models.User.objects.filter(username='jason',password='123')  # select * from user where username='jason' and password='123';
	"""

查所有的数据
1.filter() 括号内不写拿所有
	<QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]>
2.all()    查询所有数据
	<QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]>

对数据的增

1.create()
	user_obj =models.User.objects.create(name=username,password=password)
	print(user_obj,user_obj.name)
	# 该方法有返回值 返回值就是当前被创建的对象本身
2.对象的绑定方法
	# 方式2
	# 1 先生成一个User对象
	user_obj = models.User(name=username,password=password)
	# 2 调用对象的绑定方法
	user_obj.save()

对数据的删

用户点击谁 你的后端就应该删除
后端如何获取用户想要删除的数据id?
models.User.objects.filter(id=delete_id).delete()  # 将filter过滤出来的数据全部删除   批量删除

对数据的改 两种方式

如何获取用户想要修改的数据id
			根据数据id获取数据并且展示到前端页面供用户查看

	
# 方式1(推荐)               批量更新
			models.User.objects.filter(id=edit_id).update(name=username,password=password)
# 方式2(了解)
# 1 先获取数据对象
edit_obj = models.User.objects.filter(id=edit_id).first()
# 2 再修改对象属性
edit_obj.name = username
edit_obj.password = password
# 3 调用对象的绑定方法保存
edit_obj.save()

posted @ 2020-01-04 20:03  晴天sky  阅读(171)  评论(0编辑  收藏  举报
左边日期 搜索的制定样式