今日内容概要
以登陆功能为例
今天还是从整体先大致掌握django的功能,后续会详细的讲解每一块知识点
- 静态文件配置
- request对象方法初识
- pycharm链接数据库(MySQL)
- django链接数据库(MySQL)
- Django ORM简介
- 利用ORM实现数据的增删改查操作
今日内容详细
静态文件配置
1 # 登陆功能 2 3 """ 4 我们将html文件默认都放在templates文件夹下 5 我们将网站所使用的静态文件默认都放在static文件夹下 6 7 静态文件 8 前端已经写好了的 能够直接调用使用的文件 9 网站写好的js文件 10 网站写好的css文件 11 网站用到的图片文件 12 第三方前端框架 13 ... 14 拿来就可以直接使用的 15 """ 16 # django默认是不会自动帮你创建static文件夹 需要你自己手动创建 17 一般情况下我们在static文件夹内还会做进一步的划分处理 18 -static 19 --js 20 --css 21 --img 22 其他第三方文件 23 24 """ 25 在浏览器中输入url能够看到对应的资源 26 是因为后端提前开设了该资源的借口 27 如果访问不到资源 说明后端没有开设该资源的借口 28 29 http://127.0.0.1:8000/static/bootstrap-3.3.7-dist/css/bootstrap.min.css 30 """ 31 32 # 静态文件配置 33 34 """ 35 **************************************************************** 36 当你在写django项目的时候 可能会出现后端代码修改了但是前端页面没有变化的情况 37 1.你在同一个端口开了好几个django项目 38 一直在跑的其实是第一个django项目 39 40 2.浏览器缓存的问题 41 settings 42 network 43 disable cache 勾选上 44 ***************************************************************** 45 """ 46 47 STATIC_URL = '/ooo/' # 类似于访问静态文件的令牌 48 """如果你想要访问静态文件 你就必须以static开头""" 49 """ 50 /static/bootstrap-3.3.7-dist/js/bootstrap.min.js 51 52 /static/令牌 53 取列表里面从上往下依次查找 54 bootstrap-3.3.7-dist/js/bootstrap.min.js 55 都没有才会报错 56 """ 57 # 静态文件配置 58 STATICFILES_DIRS = [ 59 os.path.join(BASE_DIR,'static'), 60 os.path.join(BASE_DIR,'static1'), 61 os.path.join(BASE_DIR,'static2'), 62 ] 63 64 # 静态文件动态解析 65 {% load static %} 66 <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> 67 <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script> 68 69 70 # form表单默认是get请求数据 71 http://127.0.0.1:8000/login/?username=jason&password=123 72 """ 73 form表单action参数 74 1.不写 默认朝当前所在的url提交数据 75 2.全写 指名道姓 76 3.只写后缀 /login/ 77 """ 78 79 80 # 在前期我们使用django提交post请求的时候 需要取配置文件中注释掉一行代码 81 MIDDLEWARE = [ 82 'django.middleware.security.SecurityMiddleware', 83 'django.contrib.sessions.middleware.SessionMiddleware', 84 'django.middleware.common.CommonMiddleware', 85 # 'django.middleware.csrf.CsrfViewMiddleware', 86 'django.contrib.auth.middleware.AuthenticationMiddleware', 87 'django.contrib.messages.middleware.MessageMiddleware', 88 'django.middleware.clickjacking.XFrameOptionsMiddleware', 89 ]
request对象方法初识
1 request.method # 返回请求方式 并且是全大写的字符串形式 <class 'str'> 2 request.POST # 获取用户post请求提交的普通数据不包含文件 3 request.POST.get() # 只获取列表最后一个元素 4 request.POST.getlist() # 直接将列表取出 5 request.GET # 获取用户提交的get请求数据 6 request.GET.get() # 只获取列表最后一个元素 7 request.GET.getlist() # 直接将列表取出 8 """ 9 get请求携带的数据是有大小限制的 大概好像只有4KB左右 10 而post请求则没有限制 11 """ 12 13 def login(request): 14 # 返回一个登陆界面 15 """ 16 get请求和post请求应该有不同的处理机制 17 :param request: 请求相关的数据对象 里面有很多简易的方法 18 :return: 19 """ 20 # print(type(request.method)) # 返回请求方式 并且是全大写的字符串形式 <class 'str'> 21 # if request.method == 'GET': 22 # print('来了 老弟') 23 # return render(request,'login.html') 24 # elif request.method == 'POST': 25 # return HttpResponse("收到了 宝贝") 26 27 if request.method == 'POST': 28 return HttpResponse("收到了 宝贝") 29 return render(request, 'login.html')
pycharm链接数据库(MySQL)
1 """ 2 三个位置查找数据库相关 3 右侧上方database 4 左下方database 5 配置里面的plugins插件搜索安装 6 7 再没有卸载pycharm重新装 8 9 pycharm可以充当很多款数据库软件的客户端 10 11 参考截图和视频操作即可 12 需要提前创建好库 13 """
django链接数据库(MySQL)
1 # 默认用的是sqkite3 2 DATABASES = { 3 'default': { 4 'ENGINE': 'django.db.backends.sqlite3', 5 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 6 } 7 } 8 9 # django链接MySQL 10 1.第一步配置文件中配置 11 DATABASES = { 12 'default': { 13 'ENGINE': 'django.db.backends.mysql', 14 'NAME': 'day60', 15 'USER':'root', 16 'PASSWORD':'123', 17 'HOST':'127.0.0.1', 18 'PORT':3306, 19 'CHARSET':'utf8' 20 } 21 } 22 2.代码声明 23 django默认用的是mysqldb模块链接MySQL 24 但是该模块的兼容性不好 需要手动改为用pymysql链接 25 26 你需要告诉django不要用默认的mysqldb还是用pymysql 27 # 在项目名下的init或者任意的应用名下的init文件中书写以下代码都可以 28 import pymysql 29 pymysql.install_as_MySQLdb()
Django ORM
1 """ 2 ORM. 对象关系映射 3 作用:能够让一个不用sql语句的小白也能够通过python 面向对象的代码简单快捷的操作数据库 4 不足之处:封装程度太高 有时候sql语句的效率偏低 需要你自己写SQL语句 5 6 类 表 7 8 对象 记录 9 10 对象属性 记录某个字段对应的值 11 12 13 应用下面的models.py文件 14 """ 15 16 # 1 先去models.py中书写一个类 17 class User(models.Model): 18 # id int primary_key auto_increment 19 id = models.AutoField(primary_key=True) 20 # username varchar(32) 21 username = models.CharField(max_length=32) 22 # password int 23 password = models.IntegerField() 24 25 *************************# 2 数据库迁移命令************************* 26 python3 manage.py makemigrations 将操作记录记录到小本本上(migrations文件夹) 27 28 python3 manage.py migrate 将操作真正的同步到数据库中 29 # 只要你修改了models.py中跟数据库相关的代码 就必须重新执行上述的两条命令 30 ****************************************************************** 31 32 class User(models.Model): 33 # id int primary_key auto_increment 34 id = models.AutoField(primary_key=True,verbose_name='主键') 35 # username varchar(32) 36 username = models.CharField(max_length=32,verbose_name='用户名') 37 """ 38 CharField必须要指定max_length参数 不指定会直接报错 39 verbose_name该参数是所有字段都有的 就是用来对字段的解释 40 """ 41 # password int 42 password = models.IntegerField(verbose_name='密码') 43 44 45 class Author(models.Model): 46 # 由于一张表中必须要有一个主键字段 并且一般情况下都叫id字段 47 # 所以orm当你不定义主键字段的时候 orm会自动帮你创建一个名为id主键字段 48 # 也就意味着 后续我们在创建模型表的时候如果主键字段名没有额外的叫法 那么主键字段可以省略不写 49 # username varchar(32) 50 username = models.CharField(max_length=32) 51 # password int 52 password = models.IntegerField()
字段的增删改查
1 # 字段的增加 2 1.可以在终端内直接给出默认值 3 2.该字段可以为空 4 info = models.CharField(max_length=32,verbose_name='个人简介',null=True) 5 3.直接给字段设置默认值 6 hobby = models.CharField(max_length=32,verbose_name='兴趣爱好',default='study') 7 8 # 字段的修改 9 直接修改代码然后执行数据库迁移的两条命令即可! 10 11 # 字段的删 12 直接注释对应的字段然后执行数据库迁移的两条命令即可! 13 执行完毕之后字段对应的数据也都没有了 14 15 """ 16 在操作models.py的时候一定要细心 17 千万不要注释一些字段 18 执行迁移命令之前最好先检查一下自己写的代码 19 """ 20 21 # 个人建议:当你离开你的计算机之后一定要锁屏
数据的增删改查
1 # 今天只会介绍一点点 后面会详细的介绍 2 3 # 查 4 res = models.User.objects.filter(username=username) 5 """ 6 返回值你先看成是列表套数据对象的格式 7 它也支持索引取值 切片操作 但是不支持负数索引 8 它也不推荐你使用索引的方式取值 9 user_obj = models.User.objects.filter(username=username).first() 10 """ 11 filter括号内可以携带多个参数 参数与参数之间默认是and关系 12 你可以把filter联想成where记忆 13 14 15 16 # 增 17 from app01 import models 18 res = models.User.objects.create(username=username,password=password) 19 # 返回值就是当前被创建的对象本身 20 21 # 第二种增加 22 user_obj = models.User(username=username,password=password) 23 user_obj.save() # 保存数据
今日考题
1 """ 2 今日考题 3 1.什么是静态文件,django静态文件配置如何配置,如何解决接口前缀不断变化,html页面上路径的引用需要反复修改的问题 4 2.request对象的方法有哪些,分别是干什么用的,请具体阐述细节及注意事项 5 3.django自带的数据库是什么,如何换成其他数据库例如MySQL,如何配置更换 6 4.什么是django orm,如何使用django orm,数据库迁移命令如何书写 7 5.orm字段的增删改查与数据的增查如何实现 8 """
今日内容回顾
静态文件配置
1 """ 2 在浏览器窗口输入url之所以能够访问到对应的资源是因为后端提前开设了该资源的访问接口 3 4 我们习惯将html文件存放在templates文件夹下 5 我们习惯将静态文件存放在static文件夹下 6 静态文件 7 网站已经写好的 活着是第三方现成的代码 直接拷贝使用 8 css文件 js文件 img文件 第三方组件 9 10 static文件夹内还会创建几个文件夹 11 css 12 js 13 img 14 第三方 15 16 django不会自动帮你创建static文件夹需要你自己手动创建 17 """ 18 STATIC_URL = '/static/' # 访问静态文件的令牌 19 20 # 静态文件配置 settings.py 21 STATICFILES_DIRS = [ # 令牌持有者可以访问的文件路径 22 os.path.join(BASE_DIR,'static'), 23 os.path.join(BASE_DIR,'static1'), 24 os.path.join(BASE_DIR,'static2'), 25 ] 26 """ 27 查找顺序就是从上往下依次查找,查找到一个就不会继续往下找了所以可能会出现替换的情况 28 """ 29 30 # 令牌动态解析 31 <link href="/static/a.txt"></link> 32 33 {% load static %} 34 <link href="{% static 'a.txt' %}"></link>
request对象方法初识
1 # 登陆功能 2 3 # form表单action三个参数写法 4 5 request.method # 获取当前请求方式 全大写的字符串 6 7 request.GET # 获取url问好后面携带的参数 8 .get() 列表最后一个元素 9 .getlist() 拿整个列表 10 request.POST # 获取post请求提交过来的普通键值对(不包含文件) 11 .get() 列表最后一个元素 12 .getlist() 拿整个列表 13 """ 14 前期我们在朝django后端提交post请求的是时候要先去配置文件中注释一行代码 15 MIDDLEWARE = [ 16 # csrf... 17 ] 18 """ 19 20 def index(request): 21 if request.method == 'POST': 22 return HttpResponse('post') 23 return HttpResponse('get')
pycharm链接数据库
1 # 找到pycharm database选项(三个地方查找) 2 3 # 选取对应的数据库 下载对应的驱动 4 """ 5 明明链接上了数据库 但是看不到表无法操作 6 这个时候你只需要将刚刚创建的链接删除 重新链接一次即可 7 """
django链接MySQL
1 # 1.配置文件中配置 2 DATABASES = { 3 'default': { 4 'ENGINE': 'django.db.backends.mysql', 5 'NAME': 'day60', 6 'USER':'root', 7 'PASSWORD':'admin123', 8 'HOST':'127.0.0.1', 9 'PORT':3306, 10 'CHARSET':'utf8' 11 } 12 } 13 14 # 2.init文件指定pymysql 15 import pymysql 16 pymysql.install_as_MySQLdb()
django orm(重要)
1 """ 2 orm不会帮你创建库 只能创建到表的层面 3 需要你自己提前创建好库 4 """ 5 # 对象关系映射 6 表 类 7 记录 对象 8 数据 对象属性/方法 9 """ 10 能够让一个不会sql语句的python程序员也能够简单快捷的操作数据库,极大的提升开发效率 11 """ 12 13 # 去应用下的models.py中书写模型类 14 # 类 模型类 15 # 表 模型表 16 class UserInfo(models.Model): 17 # 当你没有创建主键字段的时候orm会自动帮你创建一个名为id的主键字段 18 uid = models.AutoField(primary_key=True) 19 # uid int primary key auto_increment 20 username = models.CharField(max_length=32) 21 # username varchar(32) CharField字段一定要书写max_length参数 22 password = models.IntegerField() 23 # password int 24 **************************数据库迁移命令***************************** 25 1.python3 manage.py makemigrations 26 # 将操作记录到小本本上(migrations文件夹内) 不能真正的直接操作数据库 27 2.python3 manage.py migrate 28 # 将操作真正的同步到数据库中 29 """只要在models中书写了跟数据库相关的代码 就必须要重新执行上述两条命令""" 30 31 # pycharm简单快捷输入 32 tools 33 run manage.py task 34 自动提示 35 *******************************************************************
简单的orm语句
1 # 字段的增删改查 2 # 增 3 1.终端里面自己加默认值 4 2.null=True 5 3.default='666' 6 7 # 删 8 注释代码执行两条命令 (然后收拾行李跑路走人) 9 # 在操作models.py中的代码的时候一定要细心 10 11 # 改 12 修改代码执行两条命令 13 14 # 数据的增查 15 # 增 16 from app01 import models 17 1.create() 18 user_obj = models.UserInfo.objects.create(**kwargs) 19 # 改方法有一个返回值 就是当前创建的数据对象本身 20 2.对象.save() 21 # 先生成一个类对象 22 user_obj = models.User(**kwargs) 23 # 对象调用save方法 24 user_obj.save() 25 26 # 查 27 1.filter() # where 28 res = models.UserInfo.objects.filter(**kwargs) 29 """ 30 返回的结果是一个querySet对象 你可以把它看成是一个列表套数据对象 31 [数据对象1,数据对象2...] 32 33 支持索引和切片操作 但是不支持负数 并且不推荐你使用索引 34 35 .first()方法 36 37 filter括号内可以写多个参数 查询的时候默认是and关系 38 """
作业
1 今日作业 2 必做题 3 1.整理今日考题,今日笔记,今日内容 4 2.熟练掌握django静态文件配置、数据库链接配置,注意事项 5 3.熟练掌握django orm大体功能 6 4.利用django在前端页面上完成注册登陆功能 7 8 选做题 9 1.编写图书管管理系统(周作业) 10 提示:主要表(图书表,出版社表,作者表),尝试利用orm建立表关系 11 不会写没关系,后面会讲