Django 推导、简介

目  录

  • web应用前提知识

  web应用定义、软件开发、HTTP协议及特性、动静态页面、模板渲染、web请求流程

  • 手撸简易版本的web框架

  思路推导:。。。。。

  • web框架

  web主流框架的分类及其特点介绍

  • Django简介

  创建Django 项目的方式、app(应用)的概念及注意事项、Django各个文件的作用、Django必会三板斧

  • 关于encode   和 decode   的小技巧

一、web应用前提知识

1、什么是web应用?

web应用本质上就是一个socket服务端,而用户的浏览器就是一个客户端。

(这样我们就可以自己实现一个web框架)

2、软件开发架构

c/s 架构: 客户端 与 服务端

b/s 架构: 浏览器 与 服务器

b/s架构本质上也就是 c/s架构

3、HTTP协议及特性

HTTP协议的由来?

我们客户端想服务端发送请求数据,以及服务端向客户端返回数据 都需要统一的格式,

统一格式就需要一个统一的规则,这个规则就是HTTP协议。

HTTP协议:

超文本传输协议,它规定了客户端与服务端之间消息传输的格式。

HTTP协议的四大特性:

  a、基于TCP/IP协议作用于应用层的协议

  b、基于请求响应

    一次请求一次回应,服务器不会主动向客户端发送数据

  c、无状态

    服务端不会保留客户端的状态,客户端每一次请求都是一次新的请求。。。。

  d、无连接

    HTTP 协议,一次请求回应之后就立即断开连接

数据格式之请求:

  请求首行

  请求头(一堆k,v键值对)

  请求体(post请求携带的数据)

数据格式之响应:

  响应首行

  响应头(一堆k,v键值对)

  响应体(post请求携带的数据)

响应状态码:

  1XX: 服务器已经成功接收到你的数据正在处理,并且你可以继续提交数据

  2XX:  请求成功      服务器已经返回你想要的数据

  3XX: 重定向(跳转网页)

  4XX: 请求资源不存在 (找不到请求的对应数据)

  5XX: 服务器错误

4、动静态页面

静态页面:

  页面上的数据都是写死的,万年不变

动态页面:

  页面上的数据都是从后端动态获取的

  例如:动态获取当前时间, 将数据库的数据内容传递给前端页面

5 模板渲染

  后端生成的数据可以直接传递给前端页面使用(前端页面可以灵活的操作该数据) 》》》 模板语法

  模板渲染 、 模板语法需要用到第三方库    pip install jinja2

  模板语法  jinja2 :   支持前端直接使用类似于Python的语法操作数据,如下所示

<p>{{ user_dic }}</p>
<p>{{ user_dic.name }}</p>
<p>{{ user_dic['password'] }}</p>
<p>{{ user_dic.get('name') }}</p>
    
{% for user in user_dict %}  <!--[{},{},{},{}]-->
    <tr>
        <td>{{ user.id }}</td>
        <td>{{ user.name }}</td>
        <td>{{ user.password }}</td>
    </tr>
{% endfor %}

6、web请求流程图

注意:templates文件

该文件夹存放的就是所有的页面文件(.html)

二、手撸简易版本的web框架

思路推导:

1、手撸web框架

(1)socket自己写;(2)http数据自己处理

如何解决上述两个问题,我们引出以下步骤:

2、wsgiref模块(web服务网关接口)

(1)socket代码帮你封装好了

(2)http数据自动帮你处理好了

  a、请求来的时候,帮你拆分http数据格式

  b、响应走的时候,帮你封装成了符合http数据格式的数据

3、根据不同的功能拆封成不同的py文件

  urls.py    路由与视图函数的对应关系;

  views.py  处理后端业务逻辑的视图函数(视图函数不单单只是函数,也可以是类)

  templates     专门存放html文件

规律:只要想添加一个功能,就去urls.py 里面添加一条对应关系,再去views.py 里面写一个视图函数!!!

接下来的步骤该渲染前端页面了:

4、动静态页面

(1)将后端获取到的时间传递给前端页面

  利用字符串的替换,实现数据传递

(2)将字典传递给前端页面 并且可以很方便的操作

  借助于jiaja2模块实现模板的渲染

  from jinja2 import Template

  temp = Template(data)

  res = temp.render(user={'name':'jsaon'})

模板渲染:利用模板语法 实现后端传递数据给前端html页面

模板语法书写格式:两种方式

  变量相关:{{   }}

  逻辑相关:{%  %} 

三、web框架

什么是web框架?

web框架的本质就是一个socket服务端。

python主流的三大web框架:

Django:大而全, 自带很多功能模块,(缺点: 有点笨重)

Flask:  短小精悍, 自带的功能模块很少,大部分依赖于第三方模块。

Tornado:  异步非阻塞,用于处理多io, 多路复用的情况,可以写游戏后端。

web框架至少包括3部分:

  a、socket

  b、路由与视图函数

  c、模板渲染

3个主流框架分别对应的特点:

  Django   

    a、用的别人的 wsgiref

    b、自己写的

    c、自己写的

  Flask:

    a、用的别人的werkzeug

    b、自己写的

    c、用的别人的 jinja2

  Tornado:

    a,b,c 都是自己写的

注意事项(*****************************):

  1.计算机的名称不能有中文
  2.一个pycharm窗口就是一个项目,不要多个项目放在一个窗口里面
  3.项目名不能起中文

四、Django简介

1、下载与安装事项

版本问题
  djang下载
  推荐下载1.11.11版本

下载的两种方式:
  命令行直接下载
    pip3 install django==1.11.11
  pycharm下载

验证是否下载成功
  django-admin

2、创建Django项目的两种方式

方式1:命令行创建

  创建Django项目:

    django-admin startproject  项目名

  创建app应用:

    python3 manage.py startapp app01

  启动django项目:

    python3 manage.py runserver

方式2:pycharm创建

创建django项目

  FILE >>> new project 选择第二个django 需要注意名字不能有中文,选择本地的解释器,勾选后台管理

创建app的2种方式:(注意:是在Djang项目创建方式2的基础上)

  (1)pytharm命令行创建:

    python3 manage.py  startapp  app01

  (2)Tools 下面run manage task功能栏:

      在功能栏下面写代码不需要写‘python36  manage.py ’, 可以直接写startapp  app01

  启动django项目的两种方式:

  (1)在run manage task 功能栏下面直接写代码 “runserver”

  (2)点击绿色箭头按钮

强调:

  1.用django一定要保证只有一个在运行状态 切记切记!!!!!!!

  2.一定记得清浏览器的缓存

  

五、关于encode 和 decode的小技巧

 不用关系到底是应该用encode 还是decode  ,只需要知道现在数据是什么类型,我们想要转成什么类型的数据即可!!!

原文地址:https://www.cnblogs.com/qinsungui921112/p/11460026.html