静态文件配置、request对象方法、django连接数据库、迁移命令、字段和数据的增删改查
1、静态文件配置
静态文件:网站所用到的已经提前写好了的文件。
- css
- js
- 第三方的组件
- bootstrap
- sweetalert
- fontawesome
- ...
静态文件配置
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请求的时候 需要先去配置文件中注释掉一行
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', ]
2、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请求
所以我们应该针对非get请求作出逻辑判断 将get请求直接写在函数体内而不做判断。
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')
3、pycharm连接数据库
4、django连接数据库
- 1.先去配置文件中配置相关参数
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库类别 'NAME': 'd9', # 库的名字 'HOST':'127.0.0.1', 'PORT':3306, 'USER':'root', 'password':'123', 'CHARSET':'utf8' } }
- 2.在项目名或者应用名下面的__init__文件中告诉django使用pymysql链接数据库而不是用默认的mysqldb
import pymysql pymysql.install_as_MySQLdb()
5、django orm简介
django orm不会帮你创建库,只能帮你自动创建表。
首先需要先去对应的应用下的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()
数据库迁移(同步)命令
1.python3 manage.py makemigrations # 仅仅是将你对数据库的改动记录到某个小本本上(migrations文件夹) 2.python3 manage.py migrate # 将改动真正的同步到数据库中
上面两个命令永远是成对出现的 只要你执行了1 就必须要执行2。
注意:只要你动了models.py跟数据库相关的代码,你就必须要重新执行上面的两条命令来保证数据库与models.py一致。
6、字段的增删改查
字段的增
- 1.要么给该字段设置默认值
- 2.要么运行该字段可以为空
字段的改
- 修改models代码,之后执行数据库迁移命令即可。
字段的删
- 只要注释掉对应的字段 ,执行数据库迁移命令就会将对应的字段及数据信息全部删除(慎用)
7、数据的增删改查
查:
1.filter() 括号内不写拿所有 <QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]> 2.all() 查询所有数据 <QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]>
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.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(update) 批量更新 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()