一 静态文件配置
1.目的:主要是为了保证templates文件夹下的html文件可以正确的导入css,js,jq等样式。
2.具体步骤:
#1.首先创建static文件夹,与app应用同级目录,将css jq js等文件放进去(通常情况下文件夹中存放这几个文件夹)。
css文件夹 当前网站所有的样式文件
js文件 当前网站所有的js文件
img文件 当前网站所有的图片文件
其他(前端框架代码 第三方插件代码...)
#2.静态文件配置(settings.py中配置)
STATIC_URL = '/static/' # 这个static不是文件夹的名字 而是接口前缀 """只要你想访问静态文件中的资源 文件路径就必须用static开头""" # 手动将static文件夹中所有的资源暴露给用户 STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), # 真正的文件夹路径 os.path.join(BASE_DIR,'static1'), # 真正的文件夹路径 ]
#3.temlates文件夹下html文件引入
#1.动态解析 静态文件接口前缀"动态解析" {% load static %} <script src="{% static 'jq/jquery-3.4.1.js' %}"></script> <link rel="stylesheet" href="{% static 'bootstrap-3.3.7/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7/js/bootstrap.min.js' %}"></script> # 静态 <script src="/static/jq/jquery-3.4.1.js"></script> <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css"> <script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
二 form表单提交数据
1.form表单默认是get请求,携带数据的方式是url问好后跟数据。例如:http://127.0.0.1:8000/login/?username=zekai&password=123
2.可以通过form表单的method属性修改为post请求,改成post请求之后 需要去settings.py文件中注释掉一个中间件。
#1.form表单修改post请求
<form action="" method="post">
#2.settings.py注释中间件
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', ]
3.form表单action值的三种情况
form表单提交数据目的地由action 1.不写的情况下 默认往当前地址提交 2.还可以写后缀/index/(将项目常用这种) 3.还可以写全路径
三 pycharm连接数据库
大前提
1.settings文件中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day51', 'HOST':'127.0.0.1', 'PORT':3306, 'USER':'root', 'PASSWORD':'123', 'CHARSET':'utf8' }
1.按如下图步骤查找数据库(第4步也可选择其他数据库,以mysql为例,)
2.选择mysql数据库之后
#1.先下载mysql数据库驱动(注意驱动版本选择与数据库版本相匹配)
#2.连接数据库
#3.连接成功后
3.
还要在项目名下的init文件或者是应用名下的init文件中告诉django不要使用默认的mysqldb连接mysql
而是使用pymysql
# 在项目和app应用其中一个__init__.py文件声明即可
2.还要在项目名下的init文件或者是应用名下的init文件中告诉django不要使用默认的mysqldb连接mysql
而是使用pymysql
import pymysql pymysql.install_as_MySQLdb()
四 orm及模型表
ORM对象关系映射
类 》》 表
对象 》》 一条条记录
对象的属性 》》 字段对应的值
1.首先需要在app 应用models.py中书写模型类(数据对用的表)
from django.db import models # Create your models here.
# 例:创建User类
class User(models.Model): # 将id字段设置为User表主键字段 在django orm中 你可以不写主键字典 django会默认给你的表创建一个名为id的主键字段 # id = models.AutoField(primary_key=True) # 一旦你自己指定了主键字段 那么django就不会自动再帮你创建了 username = models.CharField(max_length=32) # username varchar(32) CharField必须要指定max_length参数 # password = models.IntegerField() # password int password = models.CharField(max_length=64) # addr = models.CharField(max_length=32,default='China') # default该字段默认值 # age = models.IntegerField(null=True) # 该字段允许为空 def __str__(self): return '我是user表中的对象:%s'%self.username
2.执行数据库迁移(同步)命令
python3 manage.py makemigrations # 仅仅是在小本本上(migrations文件夹)记录数据库的修改 并不会直接操作数据 python3 manage.py migrate # 将数据库修改记录 真正同步到数据库 注意:1.只要动了models中跟数据库相关的代码 就必须重新执行上面的两条命令 缺一不可(******)
2.执行完上述2条命令后,创建出来数据库的表会在表名前加上app应用名
3.表字段的增删改查
大前提:只要增删改,操作完之后就执行数据库迁移命令 1.增: 直接在modles.py文件的类中,书写增加的字段代码即可 注意:如果事先表创建好了,还需要添加默认值或设置为空如下事例。 例:1.给新增的字段设置默认值(事先创建好) addr = models.CharField(max_length=32,default='China') # default该字段默认值 例:2.给新增的字段设置成可以为空(事先创建好) age = models.IntegerField(null=True) # 该字段允许为空 2.删(慎用) 删除字段 直接在models.py中注释该字段 然后重新执行两条命令即可 注意:执行完之后 表中该字段所对应的所有的数据全部删除 并且一般情况下 基本是不会用到真正意义上的删除 3.改 更改字段 直接在models.py中对该字段代码重新书写 然后重新执行两条命令即可 4.查 数据库中sql语句或models.py查看
4.获取前端的数据
#1..操作数据行之前需要知道的
#1.获取请求方式 request.method # 能够获取前端请求方式 并且是全大写的字符串 # 2.获取请求数据(post和get同理) request.POST # <QueryDict: {'name': ['zs'], 'password': ['123']}> 获取前端post请求提交过来的数据 就把它当成一个大字典即可,k为form表单里的name值,v为列表 列表里为用户输入的值 # 3. request # 理解为一个对象包含了浏览器的许多信息
#2.前端的数据获取(post和get同理,以post为例)
# 方式1(推荐使用) request.GET.get('username') # 虽然value是一个列表 但是默认只取列表中最后一个元素 # 方式2(强烈不建议你使用中括号的形式取值,k不存在直接报错)
password = request.POST['password'] # 不推荐 使用
# 方式3(获取整个列表)
request.GET.getlist('hobby')
5.数据行
前提
首先在app应用的文件夹下的 views.py 导入models.py文件 以 app01为例: from app01 import models
#1.数据行增
#方式1 models.类名.objects.create(属性名1=值,属性名2=值) 例: models.User.objects.create(username=username,password=password)
create方法能够新增数据 并且有一个返回值
# 返回值就是新增的数据对象本身
#方式2 对象名=models.类名(属性名1=值,属性名2=值) 对象名.save() 例: user_obj = models.User(username=username,password=password) user_obj.save()
#2.数据行的查
方式1 filter(推荐使用) 1.filter查询出来的结果是一个querySet对象可理解为一个"列表 列表内放的才是一个个的数据对象本身,这个列表支持正数索引取值和切片但不推荐" 2.当查询条件不存在的时候 不会报错 只会返回一个空列表,filter括号内 支持写多个参数用逗号隔开 并且参数与参数之间是and的关系 3.filter拿到的结果就是一个querySet对象(你现在只需要知道filter拿到的结果就能够点query查看sql语句) models.类名.objects.filter(条件) models.类名.objects.all() 语法事例1 user_list = models.User.objects.filter(username=username) #拿到querySet对象(列表) 语法事例2 user_obj = models.User.objects.filter(username=username).first() # 拿列表中第一个数据对象 语法事例3 user_list = models.User.objects.all() # 查询所有 print(res.query) # 只有querySet对象才可以直接点query查看年内部对应的sql语句 方式2 get(不推荐):返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。 models.类名.objects.get(条件) # 获取对象自身,不再是列表套对象 models.User.objects.get(username=username)
#3.查询基础上数据行的删
models.类名.objects.filter(条件).delete() # delete from user where id = delete_id; 事例: models.User.objects.filter(id=delete_id).delete() # delete from user where id = delete_id;
#4.查询基础上更改
方式1(推荐): models.类名.objects.filter(条件).update(属性名1=值,属性名2=值) models.User.objects.filter(id=edit_id).update(username=username,password=password) # update user set username = username,password = password where id = edit_id """ filter拿到是一个列表 filter操作其实都是批量操作 如果filter结果列表中有多个数据 那么会一次性全部修改 类似于for循环一个个修改 """ 方式2(不推荐): 对象.属性=值 对象.save() edit_obj.username = username edit_obj.password = password edit_obj.save() """ 第二种方式会从头到尾将所有的字段全部修改一遍 效率极低 """