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")  # 定向到外部百度页面
      
  • 相关阅读:
    [置顶] windows player,wzplayerV2 for windows
    wzplayer 近期将会支持BlackBerry和WinPhone8
    wzplayerEx for android(真正硬解接口,支持加密的 player)
    ffmpeg for ios 交叉编译 (支持i686 armv7 armv7s) 包含lame支持
    ffmpeg for ios 交叉编译 (支持i686 armv7 armv7s) 包含lame支持
    编译cegcc 0.59.1
    wzplayer 近期将会支持BlackBerry和WinPhone8
    wzplayerEx for android(真正硬解接口,支持加密的 player)
    windows player,wzplayerV2 for windows(20140416)更新
    编译cegcc 0.59.1
  • 原文地址:https://www.cnblogs.com/luocongyu/p/11908735.html
Copyright © 2011-2022 走看看