一、Web框架

  1. 基于B/S架构,即浏览器和S端
  2. 基于HTTP协议收发消息
  3. S端分成server和application两部分

(一)本质

(1)动静态网页

  1. 动态网页:数据是实时获取的
  2. 静态网页:数据是写死的

(2)wsgiref模块

  1. Django模块的开发环境就是用这个模块做服务器
  2. 可以让网页变成动态网页
  3. 代替S端的socket server部分
import time
from wsgiref.simple_server import make_server

# 将返回不同的内容部分封装成函数
def index(url):
    with open("index.html", "r", encoding="utf8") as f:
        s = f.read()
        now = str(time.time())
        s = s.replace("@@oo@@", now)
    return bytes(s, encoding="utf8")

def home(url):
    with open("home.html", "r", encoding="utf8") as f:
        s = f.read()
    return bytes(s, encoding="utf8")

# 定义一个url和实际要执行的函数的对应关系
list1 = [
    ("/index/", index),
    ("/home/", home),
]

def run_server(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html;charset=utf8'), ])  # 设置HTTP响应的状态码和头信息
    url = environ['PATH_INFO']  # 取到用户输入的url
    func = None
    for i in list1:
        if i[0] == url:
            func = i[1]
            break
    if func:
        response = func(url)
    else:
        response = b"404 not found!"
    return [response, ]

if __name__ == '__main__':
    httpd = make_server('127.0.0.1', 8090, run_server)
    print("我在8090等你哦...")
    httpd.serve_forever()

(3)jinja2模块

  1. 第三方模块,可以从数据库中查询数据,动态的替换html中的内容,再交给浏览器渲染
  2. 原理:字符串替换,在html页面中按照jinja2的语法规则编写,其内部就可以按照指定的语法进行替换,从而达到动态返回内容

(4)手动实现思路

  1. 纯手撸简易版本web框架

    1. 手动处理socket实现通信(未考虑并发)
    2. 手动处理HTTP数据,获取用户访问的后缀(没有考虑其他数据)
  2. 借助第三方模块

    wsgiref模块:web服务网关接口

    1. 封装了Socket,支持并发
    2. 处理HTTP协议,封装成了一个字典
    3. 也是flask的启动源码
    4. django自带的模块,本身可以承受1000左右的并发量
  3. 基于上面代码拆分文件夹

    1. urls.py:路由和视图函数对应关系(视图函数也可以是类)
    2. views.py:一堆处理业务逻辑的视图函数
    3. Templates:放html文件
  4. 动静态网页

    html页面上的数据是否写死

  5. 利用字符串替换实现时间动态展示

  6. 基于jinja2模板语法,实现后端给html页面传值

    模板语法是在后端生效,浏览器无法识别模板语法,所有的数据渲染全都是在后端生成好,然后将html页面发送给浏览器

    1. 变量相关:{{}}

    2. 逻辑相关:{%%}

      {%for i in user_list%}
      
      {%endfor%}
  7. 利用jinja2实现前端、后端、数据库三者结合

(二)python主流框架

(1)Django

  1. 大而全、自带的组件和功能多,相当于航空母舰
  2. 小项目时会显得笨重

(2)flask

  1. 小而精、自带组件和功能少,依赖第三方组件,相当于游骑兵
  2. 第三方模块多,比django还多

(3)tornado

异步非阻塞,甚至可以用来开发游戏服务器

(4)区别

A:socket部分
B:路由和视图匹配
C:模板语法

Django:
    A用的是别人的(wsgiref模块)
    B自己写的
    C自己写的

flask:
    A用的比人的(werkzeug)
    B自己写的
    C用的别人的 (jinja2模块)

tornado:
    ABC都是自己写的

二、Django简介

(一)安装

  1. 安装:pip install django==1.11.11
  2. 检测是否安装成功:django-admin

(二)使用

(1)命令行使用

  1. 创建django项目

    django-admin startproject 项目名(比如mysite)

  2. 创建应用

    切换项目文件夹目录下

    python3 manage.py startapp 应用名

  3. 启动django项目

    切换到项目文件夹目录下:

    python manage.py runserver

    python manage.py runserver 127.0.0.1:8080

  4. 注意

    1. 不会自动创建templates文件夹
    2. templates文件路径也不会自动配置

(2)pycharm使用

  1. python解释器不能使用3.7版本,有bug

  2. 创建运用

    打开它Tools中的run manaege.py task,输入startapp

(三)app

(1)概念

  1. django是一个以开发app为主要功能的框架

  2. 一个django项目就像一所大学,那么app就是其中的各个学院

  3. 大学为学院提供了一个环境,每个大学也可以有多个学院

(2)app注册

创建好的app需要在django配置文件中注册方可生效

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 'app01'  # 简便写法
    'app01.apps.App01Config'  # 最完整的写法
]

(四)django文件功能

(1)项目同名的文件夹

  1. settings.py:用户可以配置的配置的文件
  2. urls.py:路由和视图函数对应关系

(2)应用名文件夹

  1. migrations文件夹:所有数据库相关的操作记录
  2. admin.py:django的admin后台管理
  3. apps.py:注册app相关
  4. models.py:数据库相关的模型类
  5. tests.py:测试文件
  6. views.py:处理业务逻辑的视图函数

(3)manage.py

django的入口文件

(4)templates文件夹

存放html文件

(五)基础三件套

from django.shortcuts import HttpResponse, render,redirect

(1)HttpResponse

内部传入一个字符串参数返回给浏览器

def index(request):
    # 业务逻辑码
    return HttpResponse('OK')

(2)render

返回填充好数据的html文件和内部传入的字典数据

def index(request):
    # 业务逻辑代码
    return render(request,'index.html',{'name':'wick','hobby':['sleep','drink']})

(3)redirect

重定向到指定的URL

def index(request):
    # 业务逻辑码
    return redirect('/home/')

(六)常见错误

(1)“UnicodeEncodeError...”

通常是因为计算机名为中文,改为英文后重启即可

(2) “SyntaxError: Generator expression must be parenthesized”

通常是因为使用了python3.7版本,该版本于django有兼容性问题

(day49)Django框架简介的更多相关文章

  1. Python学习(三十)—— Django框架简介

    转载自:http://www.cnblogs.com/liwenzhou/p/8296964.html Django框架简介 一.MVC框架和MTV框架(了解即可) MVC,全名是Model View ...

  2. Django框架简介及模板Template,filter

    Django框架简介 MVC框架和MTV框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View) ...

  3. Django框架简介与使用注意事项

    一.Django框架简介 MVC框架和MTV框架 MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model). ...

  4. python 之 Django框架(Django框架简介、视图装饰器、request对象、Response对象)

    12.33 Django框架简介: MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...

  5. wsgiref模块、web框架、django框架简介

    """web框架:将前端.数据库整合到一起的基于互联网传输的python代码 web框架也可以简单的理解为是软件开发架构里面的'服务端'""" ...

  6. 手动搭建简易web框架与django框架简介

    目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...

  7. Python学习笔记_04:Django框架简介

    目录 1 什么是Django? 2 Django框架的开发环境搭建 3 Django操作MySql数据库简介 4 功能强大的Django管理工具应用 1 什么是Django? Django是应用于We ...

  8. Django框架简介,wsgiref 与 jinja2 模块

    目录 框架简介 wsgiref模块 jinja2 模块 框架简介 Django是一个web开发框架,用来开发web应用,本质就是, web框架+socket服务端 MVC框架和MTV框架 MVC,全名 ...

  9. Django ---- 框架简介

    MVC框架和MTV框架 mvc,全名是 Model View Controller, 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Cont ...

  10. Django框架简介-开头

    一.MVC框架和MTV框架(了解即可) MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制 ...

随机推荐

  1. django实现多种支付、并发订单处理

    django实现多种支付方式 ''' #思路 我们希望,通过插拔的方式来实现多方式登录,比如新增一种支付方式,那么只要在项目中新增一个py文件,导入里面的pay方法就可以了,这样在支付业务中支付语句是 ...

  2. 【转】MyBatis缓存机制

    转载:https://blog.csdn.net/bjweimengshu/article/details/79988252. 本文转载自公众号 美团技术点评 前言 MyBatis是常见的Java数据 ...

  3. fastdfs使用总结

    参考:https://www.cnblogs.com/chiangchou/p/fastdfs.html   说明:这篇博客是为了记录我在安装和使用FastDFS分布式文件系统时遇到的问题和解决方法, ...

  4. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 4

    18.4  创建PDO对象 使用PDO在与不同数据库管理系统之间交互时,PDO对象中的成员的方法是统一各种数据库的访问接口,所以在使用PDO与数据库交互之前,首先要创建一个PDO对象.在通过构造方法创 ...

  5. Docker容器 MySQL中文乱码解决方案

    docker exec进入容器 sudo docker exec -it 588340b778f6 bash 执行以下命令,将 character-set-server=utf8 写入mysql配置文 ...

  6. oracle多表关联update

    日常的开发中一般都是写的单表update语句,很少写多表关联的update. 不同于SQL Server,在Oracle中,update的多表连接更新和select的多表连接查询在使用的方法上存在较大 ...

  7. 依赖注入组件 Autofac 的小记

    1.  批量给 Service 层自动注入.(支持 ASP.NET Core) builder.RegisterAssemblyTypes(typeof(IProductService).Assemb ...

  8. 【CodeChef】Find a special connected block - CONNECT(斯坦纳树)

    [CodeChef]Find a special connected block - CONNECT(斯坦纳树) 题面 Vjudge 题解 还是一样的套路题,把每个数字映射到\([0,K)\)的整数, ...

  9. Spring中ApplicationListener的使用

    背景 ApplicationListener是Spring事件机制的一部分,与抽象类ApplicationEvent类配合来完成ApplicationContext的事件机制. 如果容器中存在Appl ...

  10. Java开发桌面程序学习(八)——启动浏览器或者打开资源管理器操作与hyperlink超链接的使用

    启动浏览器或者打开资源管理器 启动浏览器 java1.6版本以上,Desktop Desktop.getDesktop().browse(new URI("www.cnblogs.com/k ...