zoukankan      html  css  js  c++  java
  • 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
        
        请求头
        Host: 127.0.0.1:8080
        
        Connection: keep-alive
        
        Cache-Control: max-age=0
        
        Upgrade-Insecure-Requests: 1
        
        User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36
        
        Sec-Fetch-User: ?1
        
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
        
        Sec-Fetch-Site: none
        
        Sec-Fetch-Mode: navigate
        
        Accept-Encoding: gzip, deflate, br
        
        Accept-Language: zh-CN,zh;q=0.9
        
        Cookie: csrftoken=aOZSalMQkKGbzstfjcw3O9sDoegdywL8AD7PzhidAyx3tXShN7oQtxN1MMnS6GVX
        
        
        (******)
        请求体
        
      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")  # 定向到外部百度页面
      
  • 相关阅读:
    分页内存管理——虚拟地址到物理地址的转换【转】
    设备树(device tree)学习笔记【转】
    08 在设备树里描述platform_device【转】
    [dts]Device Tree机制【转】
    设备树快速入门【转】
    Linux 设备树详解【转】
    设备树处理之——device_node转换成platform_device【转】
    最新内核3.4)Linux 设备树加载I2C client adapter 的流程(内核3.4 高通)【转】
    基于tiny4412的Linux内核移植 --- aliases节点解析【转】
    Linux 文件系统IO性能优化【转】
  • 原文地址:https://www.cnblogs.com/luocongyu/p/11908735.html
Copyright © 2011-2022 走看看