每日测验

  1. """
  2. 今日考题
  3. 1.谈谈你对web框架的认识,简述web框架请求流程
  4. 2.python三大主流web框架的区别
  5. 3.安装django需要注意的事项有哪些(最少三条及以上,越多越好)
  6. 4.如何验证django是否安装成功,命令行如何创建django项目,如何启动django项目。与pycharm创建django项目的区别?
  7. 5.什么是app,django中如何创建app,需要注意什么
  8. """
  9. # django前期记忆的东西很多

内容回顾

  • 纯手撸web框架
    1. """
    2. 1.socket代码需要我们自己写
    3. 2.http格式的数据自己处理(只能拿到用户输入的路由)
    4. """
  • 基于wsgiref模块 ```python “”” 1.帮助你封装了socket代码 2.帮你处理http格式的数据(大字典)

web服务网关接口 1.请求来的时候帮助你自动拆分http格式数据并封装成非常方便处理的数据格式 2.响应走的时候帮你讲数据再打包成符合http格式 “””

  1. - 根据功能的不同拆分成不同py文件(关键)
  2. ```python
  3. urls.py
  4. 路由与视图函数对应关系
  5. views.py(后端业务逻辑)
  6. 业务逻辑的视图函数
  7. ps:视图函数可以是函数其实也可以是类
  8. 面向函数式编程
  9. 面向对象式编程
  10. templates模版文件夹
  11. 存储html文件
  12. # 拆分完成后 后续要想添加功能 只需要在urls.py和views.py中书写对应的代码即可
  • 动静态网页 ```python

    根据html页面内容是写死的还是从后端动态获取的

    1.后端获取当前时间 2.从数据库获取数据 … “”” 如何讲后端的数据传递给html文件(在后端发生的不在浏览器上) 1.lowb版本 利用字符串的替换 2.jinja2模版语法

    1. 即支持给html传数据
    2. 还提供了一系列快捷方式操作数据(模版语法)
    3. {{ user_list }}
    4. {%for i in user_list %}
    5. {%enfor%}
    6. jinja2的模版语法及其的贴近python语法 并且有时候比python语法更加的简单

    “””

利用wsgiref模块封装的web框架加上jinja2模版语法 结合前端后端数据库

  1. - python三大主流web框架
  2. ```python
  3. # 在你没有多少基础的时候切记不要同时学习下面多个,不然容易混淆!!!
  4. """
  5. django
  6. 大而全 类似于航空母舰
  7. 但是有时候过于笨重
  8. flask
  9. 小而精 类似于游骑兵(单行代码就可以起一个flask服务)
  10. 第三方组件很多 但是有时候也会受限于第三方
  11. tornado
  12. 异步非阻塞
  13. 速度非常快
  14. SANIC
  15. FASTAPI
  16. ...
  17. """
  • 注意事项 ```python “”” 1.计算机名称不能有中文 2.一个pycharm窗口不要打开多个项目(跟不要出现文件夹套文件夹多级目录的出现) day01 day02 … 3.文件名也不要出现中文 4.python解释器版本建议使用3.6
    1. 如果django安装成功了但是启动就报错
    2. 那么点击报错的那一行将那一行源码的逗号删除即可
    5.版本问题 1.X 2.X LTS维护时间 两个版本之间差距不大 完全不影响你的学习
  1. pip3 install django==1.11.11
  2. 环境变量配置 多版本共存

“””

  1. - django必会命令
  2. ```python
  3. # 命令行
  4. 1.创建django项目(先切换到一个盘中D:)
  5. django-admin startproject mysite
  6. mysite
  7. mysite
  8. manage.py
  9. 2.启动django项目(先切换到mysite路径下)
  10. python3 manage.py runserver 127.0.0.1:9090
  11. 3.创建应用
  12. python3 manage.py startapp app01
  13. """
  14. 1.一个django项目就类似于是一个空壳子 本身没有任何的内容(大学)
  15. 应用就类似于是一个个的功能模块(学院)
  16. 2.创建应用之后一定要先去配置文件中注册才能生效
  17. INSTALLED_APPS = [
  18. 'app01' # 简写
  19. ‘app01.apps.App01Config’ # 全称
  20. ]
  21. """
  22. # pycharm创建
  23. """
  24. 1.命令行创建不会自动创建templates文件夹并且也不会自动配置路径
  25. DIR:[os.path.join(BASE_DIR,'templates')]
  26. 2.pycharm则会自动创建并且自动配置路径
  27. 3.pycharm还可以自动帮你创建一个应用并且自动注册(只能创一个)
  28. """
  29. """
  30. django主要文件介绍
  31. -mysite
  32. --mysite
  33. ---urls.py
  34. ---settings.py
  35. ...
  36. -manage.py
  37. -app01
  38. --migrations
  39. 数据库迁移记录
  40. --apps.py
  41. --tests.py
  42. --models.py
  43. --views.py
  44. """
  • django小白必会三板斧 ```python from django.shortcuts import HttpResponse,render,redirect

return HttpResponse(‘字符串’)

return render(request,’login.html’) def ab_render(request):

  1. # 视图函数必须要接受一个形参request
  2. user_dict = {'username':'jason','age':18}
  3. # 第一种传值方式:更加的精确 节省资源
  4. # return render(request,'01 ab_render.html',{'data':user_dict,'date':123})
  5. # 第二种传值方式:当你要传的数据特别多的时候
  6. """locals会将所在的名称空间中所有的名字全部传递给html页面"""
  7. return render(request,'01 ab_render.html',locals())

return redirect(url)

  1. <a name="c7a1dd9a"></a>
  2. # 今日内容概要
  3. 以登陆功能为例
  4. 今天还是从整体先大致掌握django的功能,后续会详细的讲解每一块知识点
  5. - 静态文件配置
  6. - request对象方法初识
  7. - pycharm链接数据库(MySQL)
  8. - django链接数据库(MySQL)
  9. - Django ORM简介
  10. - 利用ORM实现数据的增删改查操作
  11. <a name="69f4f6b4"></a>
  12. # 今日内容详细
  13. <a name="dcabf74e"></a>
  14. ### 静态文件配置
  15. ```python
  16. # 登陆功能
  17. """
  18. 我们将html文件默认都放在templates文件夹下
  19. 我们将网站所使用的静态文件默认都放在static文件夹下
  20. 静态文件
  21. 前端已经写好了的 能够直接调用使用的文件
  22. 网站写好的js文件
  23. 网站写好的css文件
  24. 网站用到的图片文件
  25. 第三方前端框架
  26. ...
  27. 拿来就可以直接使用的
  28. """
  29. # django默认是不会自动帮你创建static文件夹 需要你自己手动创建
  30. 一般情况下我们在static文件夹内还会做进一步的划分处理
  31. -static
  32. --js
  33. --css
  34. --img
  35. 其他第三方文件
  36. """
  37. 在浏览器中输入url能够看到对应的资源
  38. 是因为后端提前开设了该资源的借口
  39. 如果访问不到资源 说明后端没有开设该资源的借口
  40. http://127.0.0.1:8000/static/bootstrap-3.3.7-dist/css/bootstrap.min.css
  41. """
  42. # 静态文件配置
  43. """
  44. ****************************************************************
  45. 当你在写django项目的时候 可能会出现后端代码修改了但是前端页面没有变化的情况
  46. 1.你在同一个端口开了好几个django项目
  47. 一直在跑的其实是第一个django项目
  48. 2.浏览器缓存的问题
  49. settings
  50. network
  51. disable cache 勾选上
  52. *****************************************************************
  53. """
  54. STATIC_URL = '/ooo/' # 类似于访问静态文件的令牌
  55. """如果你想要访问静态文件 你就必须以static开头"""
  56. """
  57. /static/bootstrap-3.3.7-dist/js/bootstrap.min.js
  58. /static/令牌
  59. 取列表里面从上往下依次查找
  60. bootstrap-3.3.7-dist/js/bootstrap.min.js
  61. 都没有才会报错
  62. """
  63. # 静态文件配置
  64. STATICFILES_DIRS = [
  65. os.path.join(BASE_DIR,'static'),
  66. os.path.join(BASE_DIR,'static1'),
  67. os.path.join(BASE_DIR,'static2'),
  68. ]
  69. # 静态文件动态解析
  70. {% load static %}
  71. <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
  72. <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
  73. # form表单默认是get请求数据
  74. http://127.0.0.1:8000/login/?username=jason&password=123
  75. """
  76. form表单action参数
  77. 1.不写 默认朝当前所在的url提交数据
  78. 2.全写 指名道姓
  79. 3.只写后缀 /login/
  80. """
  81. # 在前期我们使用django提交post请求的时候 需要取配置文件中注释掉一行代码
  82. MIDDLEWARE = [
  83. 'django.middleware.security.SecurityMiddleware',
  84. 'django.contrib.sessions.middleware.SessionMiddleware',
  85. 'django.middleware.common.CommonMiddleware',
  86. # 'django.middleware.csrf.CsrfViewMiddleware',
  87. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  88. 'django.contrib.messages.middleware.MessageMiddleware',
  89. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  90. ]

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. def login(request):
  13. # 返回一个登陆界面
  14. """
  15. get请求和post请求应该有不同的处理机制
  16. :param request: 请求相关的数据对象 里面有很多简易的方法
  17. :return:
  18. """
  19. # print(type(request.method)) # 返回请求方式 并且是全大写的字符串形式 <class 'str'>
  20. if request.method == 'POST':
  21. return HttpResponse("收到了 宝贝")
  22. return render(request, 'login.html')

pycharm链接数据库(MySQL)

  1. """
  2. 三个位置查找数据库相关
  3. 右侧上方database
  4. 左下方database
  5. 配置里面的plugins插件搜索安装
  6. 再没有卸载pycharm重新装
  7. pycharm可以充当很多款数据库软件的客户端
  8. 参考截图和视频操作即可
  9. 需要提前创建好库
  10. """

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. # django链接MySQL
  9. 1.第一步配置文件中配置
  10. DATABASES = {
  11. 'default': {
  12. 'ENGINE': 'django.db.backends.mysql',
  13. 'NAME': 'day60',
  14. 'USER':'root',
  15. 'PASSWORD':'admin123',
  16. 'HOST':'127.0.0.1',
  17. 'PORT':3306,
  18. 'CHARSET':'utf8'
  19. }
  20. }
  21. 2.代码声明
  22. django默认用的是mysqldb模块链接MySQL
  23. 但是该模块的兼容性不好 需要手动改为用pymysql链接
  24. 你需要告诉django不要用默认的mysqldb还是用pymysql
  25. # 在项目名下的__init__.py或者任意的应用名下的__init__.py文件中书写以下代码都可以
  26. import pymysql
  27. pymysql.install_as_MySQLdb()

Django ORM

  1. """
  2. ORM. 对象关系映射
  3. 作用:能够让一个不用sql语句的小白也能够通过python 面向对象的代码简单快捷的操作数据库
  4. 不足之处:封装程度太高 有时候sql语句的效率偏低 需要你自己写SQL语句
  5. 类 表
  6. 对象 记录
  7. 对象属性 记录某个字段对应的值
  8. 应用下面的models.py文件
  9. """
  10. # 1 先去models.py中书写一个类
  11. class User(models.Model):
  12. # id int primary_key auto_increment
  13. id = models.AutoField(primary_key=True)
  14. # username varchar(32)
  15. username = models.CharField(max_length=32)
  16. # password int
  17. password = models.IntegerField()
  18. *************************# 2 数据库迁移命令*************************
  19. python3 manage.py makemigrations 将操作记录记录到小本本上(migrations文件夹)
  20. python3 manage.py migrate 将操作真正的同步到数据库中
  21. # 只要你修改了models.py中跟数据库相关的代码 就必须重新执行上述的两条命令
  22. ******************************************************************
  23. class User(models.Model):
  24. # id int primary_key auto_increment
  25. id = models.AutoField(primary_key=True,verbose_name='主键')
  26. # username varchar(32)
  27. username = models.CharField(max_length=32,verbose_name='用户名')
  28. """
  29. CharField必须要指定max_length参数 不指定会直接报错
  30. verbose_name该参数是所有字段都有的 就是用来对字段的解释
  31. """
  32. # password int
  33. password = models.IntegerField(verbose_name='密码')
  34. class Author(models.Model):
  35. # 由于一张表中必须要有一个主键字段 并且一般情况下都叫id字段
  36. # 所以orm当你不定义主键字段的时候 orm会自动帮你创建一个名为id主键字段
  37. # 也就意味着 后续我们在创建模型表的时候如果主键字段名没有额外的叫法 那么主键字段可以省略不写
  38. # username varchar(32)
  39. username = models.CharField(max_length=32)
  40. # password int
  41. 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. 在操作models.py的时候一定要细心
  14. 千万不要注释一些字段
  15. 执行迁移命令之前最好先检查一下自己写的代码
  16. """
  17. # 个人建议:当你离开你的计算机之后一定要锁屏

数据的增删改查

  1. # 今天只会介绍一点点 后面会详细的介绍
  2. # 查
  3. res = models.User.objects.filter(username=username)
  4. """
  5. 返回值你先看成是列表套数据对象的格式
  6. 它也支持索引取值 切片操作 但是不支持负数索引
  7. 它也不推荐你使用索引的方式取值
  8. user_obj = models.User.objects.filter(username=username).first()
  9. """
  10. filter括号内可以携带多个参数 参数与参数之间默认是and关系
  11. 你可以把filter联想成where记忆
  12. # 增
  13. from app01 import models
  14. res = models.User.objects.create(username=username,password=password)
  15. # 返回值就是当前被创建的对象本身
  16. # 第二种增加
  17. user_obj = models.User(username=username,password=password)
  18. user_obj.save() # 保存数据

今日作业

  1. 今日作业
  2. 必做题
  3. 1.整理今日考题,今日笔记,今日内容
  4. 2.熟练掌握django静态文件配置、数据库链接配置,注意事项
  5. 3.熟练掌握django orm大体功能
  6. 4.利用django在前端页面上完成注册登陆功能
  7. 选做题
  8. 1.编写图书管管理系统(周作业)
  9. 提示:主要表(图书表,出版社表,作者表),尝试利用orm建立表关系
  10. 不会写没关系,后面会讲