day 49

day 49 Django 基本原理

00.三大主流web框架

  1. django
    1. 大而全,自带的组件和功能非常多
      1. 内部有检测机制,在运行状态下修改代码,会自动重启可能会报错,最好修改过后手动重启一次
    2. 缺点;写小项目时可能会比较笨重
    3. a使用wsgiref(django默认可修改),b、c自己写的
  2. flask
    1. 小而精,自带的组件特别少,功能基本依靠第三方组件
    2. 缺点;受限于第三方模块的影响
    3. 如果将第三方模块加起来能够盖过django
    4. a使用werkzeug,b自己写,c使用janja2
  3. tornado
    1. 异步非阻塞,执行速度快,甚至可以用来开发游戏服务器
    2. a、b、c都是自己写的

01.结构

  1. 三大组成

    1. a;socket部份
    2. b;路由配置
    3. c;模版语法
  2. socket部份

    1. 后端接收到的web请求结构

      请求首行
      b'GET /请求功能 HTTP/1.1\r\n
      请求头
      Host: 127.0.0.1:8080\r\n
      Connection: keep-alive\r\n
      Cache-Control: max-age=0\r\n
      Upgrade-Insecure-Requests: 1\r\n
      User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36\r\n
      Sec-Fetch-User: ?1\r\n
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\n
      Sec-Fetch-Site: none\r\n
      Sec-Fetch-Mode: navigate\r\n
      Accept-Encoding: gzip, deflate, br\r\n
      Accept-Language: zh-CN,zh;q=0.9\r\n
      Cookie: csrftoken=aOZSalMQkKGbzstfjcw3O9sDoegdywL8AD7PzhidAyx3tXShN7oQtxN1MMnS6GVX\r\n
      \r\n(******)
      请求体
    2. 接收到后对数据进行处理,得到需要的数据如请求功能

    3. 再根据功能分派不同的页面返回给浏览器

  3. 路由配置;通过键值对或元组的形势将路由和功能函数对应起来

  4. 模版语法

    1. 用来处理后端数据与html页面的交互

    2. jinja2(语法极其贴近后端python语法)能够在html页面上来操作后端传递过来的数据

      <p>{{ userDic }}</p>
      <p>{{ userDic.username }}</p>
      <p>{{ userDic['age'] }}</p>
      <p>{{ userDic.get('hobby') }}</p>
      <p>{{ userDic.get('hobby').0 }}</p>
      <p>{{ userDic.get('hobby').1 }}</p>
      <p>{{ userDic.get('hobby').2 }}</p>
      
      {% for user_dic in user_list %}  <!--jinja2的for循环-->
        <tr>
            <td>{{ user_dic.id }}</td>
            <td>{{ user_dic.username }}</td>
            <td>{{ user_dic.password }}</td>
        </tr>
      {% endfor %}                                      <!--需要添加for循环终止-->
      
      <!--
      模版的渲染。动态添加的数据是在后端处理生成的一个完整的html的过程
      渲染是在后端完成的,与前端无关(如表格的生成等。。。。)
      -->
  5. django项目同名文件夹下

    1. settings.py;配置文件,创建好的app需要再INSTALLED——APPS中添加方可生效
    2. wsgi.py;wsgiref文件
    3. urls.py;路由与视图函数对应关系,自己写的功能需要手动添加到这里
  6. app文件夹下

    1. admin.py;django admin后台管理
    2. apps.py;注册app使用
    3. models.py;放所有数据库相关的模型类
    4. views.py;处理业务逻辑的视图函数
    5. migrations文件夹;所有数据库相关的操作记录
    6. test.py;提供给你用来测试的文件
  7. manage.py;django的入口文件

  8. templates文件夹

    用来存储html页面,终端创建任务需要手动添加改文件夹并在settings文件下书写路径

    TEMPLATES = [
                     {
                         'BACKEND': 'django.template.backends.django.DjangoTemplates',
                         'DIRS': [os.path.join(BASE_DIR, 'templates')]//添加路径
                         ,
                         'APP_DIRS': True,

03.django 三板斧

from django.shortcuts import render,HttpResponse,redirect
  1. HttpResponse;返回字符串

    def index(request):
      return HttpResponse("一串字符串")
  2. render;返回html文件

    def login(requset):
      user_dic = {"username": "jason", "password": "123456"}
      return render(requset, "login.html", {'xxx':user_dic}) # 将dic传入html
    # django的模版语法字典只支持对象.属性的方式
  3. redirect;重定向

    def home(requset):
      return redirect("/login")  # 定向到本地login页面
     return redirect("https://www.baidu.com")  # 定向到外部百度页面

猜你喜欢

转载自www.cnblogs.com/luocongyu/p/11908735.html