静态文件
什么是静态文件
网站所使用到的提前已经写好的文件
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'),
]
添加对应的资源
两者必须一一对应
添加后的执行顺序
如何解决动态绑定的问题
{% 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>
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',
]
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面向对象语法,以点的方式来简单快捷的操作数据库。
怎么用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()
如果我们在创建表时,为了防止重名,所以系统会自动生成一个后缀名 如图。
数据库迁移(同步)命令***********
回顾:(同步异步)
同步(串行)
如果两个啊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.要么运行字段为空
字段的查
自己查看表
字段的改
修改models代码 之后执行数据迁移命令即可
1.python3 manage.py makemigrations # 仅仅是将你对数据库的改动记录到某个小本本上(migrations文件夹)
2.python3 manage.py migrate # 将改动真正的同步到数据库中
字段的删
只要注释掉对应的字段 执行数据库迁移命令就会将对应的字段及数据信息全部删除(慎用)
对数据的增删改查
对数据的查
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()