django(二)
一、静态文件
1.什么是静态文件
网站所使用的提前写好的,之后也不会再去改变的文件。
例如css,js,第三方组件:bootstrap等
2.static文件夹
专门用来存放静态文欧东件的,需要自己手动创建,文件内部通常是一下结构:
static -css 网站所用到的所有的css文件 -js 网站所用到的所有的js文件 -image 网站所用到的所有的图片文件 第三方文件
3.静态文件配置
基本配置
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 '静态文件路径' %}"> <script src="{% static '静态文件路径' %}"></script>
4.form表单
action参数:
不写,默认朝当前地址提交数据
全路径
后缀(/index)
method参数:get、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请求来 应该只需要返回一个html文件
post请求来 应该获取用户提交的数据 然后做进一步处理
5.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请求较多 所以可以直接再函数体内先写get请求对应的逻辑
将其他请求利用request.method做出区分
例子:
def login(request): if request.method == 'POST': return HttpResponse('收到了') return render(request,'login.html')
二、pycharm连接MySQL
1.django连接数据库
- 先去配置文件中配置相关的参数
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库类别 'NAME': 'day49', # 库的名字 'HOST':'127.0.0.1', 'PORT':3306, 'USER':'root', 'password':'123', 'CHARSET':'utf8' } }
- 在项目名或者应用名下面的__init__文件中告诉django使用pymysql链接数据库而不是用默认的mysqldb
import pymysql pymysql.install_as_MySQLdb()
三、django ORM简介
ORM对象关系映射
类 表
对象 记录
属性 字段值
作用:能够让一个不会数据库操作的小白也能够通过Python面向对象语法 句点符来简单快捷的操作数据
1.创建表
首先需要先去对应的应用下的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()
数据库迁移(同步)命令
- python3 manage.py makemigrations :仅仅是将你对数据库的改动记录到migrations文件夹
- python3 manage.py migrate :将改动真正的同步到数据库中
注意:只要动了models.py跟数据库相关的代码,就必须必须要重新执行上面的两条命令来保证数据库与models.py一致
2.字段的增删改查
增
- 要么给该字段设置默认值
- 要么运行该字段可以为空
查
- 可以直接在数据库中查看字段
改
- 修改models代码 之后执行数据库迁移命令即可
删
- 只要注释掉对应的字段 执行数据库迁移命令就会将对应的字段及数据信息全部删除(慎用)
3.数据的增删改查
查
- 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'; """
- all() 查询所有数据
增:两种方法
方式一:create()
user_obj = models.User.objects.create(name=username,password=password) print(user_obj,user_obj.name) # 该方法有返回值 返回值就是当前被创建的对象本身
方式二:对象的绑定方法
# 1 先生成一个User对象 user_obj = models.User(name=username,password=password) # 2 调用对象的绑定方法 user_obj.save()
删:
- delete()
models.User.objects.filter(id=delete_id).delete() # 将filter过滤出来的数据全部删除 批量删除
改:两种方法
方式一:updata()
models.User.objects.filter(id=edit_id).update(name=username,password=password)
方式二:对象的绑定方法
# 1 先获取数据对象 edit_obj = models.User.objects.filter(id=edit_id).first() # 2 再修改对象属性 edit_obj.name = username edit_obj.password = password # 3 调用对象的绑定方法保存 edit_obj.save()