1.http概述

  当前版本:1.1

  http协议是一个客户端和服务端请求应答的标准TCP,如浏览器作为客户端发送请求到服务器指定端口 ,服务器将内容返回给服务器

2.协议格式

  http定义了客户端与服务端数据交互的协议

  request客户端向服务端发送请求报文 ,包括请求行(请求方法 空格 url 空格 协议版本 回车符换行符) ,请求头(key:value 回车符换行符 key:value 回车符换行符*2),请求数据

####一个request请求(get没有请求数据,携带在url上)
b'GET /favicon.ico HTTP/1.1\r\nHost: 127.0.0.1:8888\r\nConnection: keep-alive\r\nSec-Fetch-Mode: no-cors\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36\r\nAccept: image/webp,image/apng,image/*,*/*;q=0.8\r\nSec-Fetch-Site: same-origin\r\nReferer: http://127.0.0.1:8888/\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\n\r\n'

  response服务端响应客户端数据 ,包括状态行(协议版本 空格 状态码 空格 状态码描述 回车符换行符),响应头(key:value 回车符换行符:value 回车符换行符*2),响应数据

HTTP/1.1  OK\r\nContent-Length: 643\r\nContent-Type: text/plain; charset=UTF-8\r\nDate: Thu,  Aug  :: GMT

  统一资源定位符:协议 地址 端口 路径 参数

  请求头中一般有浏览器信息,cookie

  响应头中一般有编码,时间

3.创建最简单的http服务端

import socket
ser1 =socket.socket()
ser1.bind(('127.0.0.1',8888))
ser1.listen(5) while 1:
conn.addr = ser1.accept()
data = conn.recv(1024) print(data) #请求request数据

    conn.send(b'HTTP/1.1 200 OK\r\nContent-Type: text/html;charset=UTF-8\r\n\r\n')  #响应数据http协议

    conn.send('<h1>hello world</h1>'.encode('utf-8'))    #数据

    conn.close()

ser1.close()

4.动态页面与静态页面

  动态页面就是与后端交互获取数据展示页面 ,静态页面就是展示页面不能交互

5.服务器程序与应用程序

  web程序的三大块:1.负责socket连接请求 2.根据不同地址路径返回不同内容 3.返回动态页面

  服务器程序完成了socket的连接的部分 ,但是它不关心业务逻辑代码处理连接请求

  应用程序完成了业务逻辑相关代码 django框架完成这部分,返回什么页面 ,不考虑如何与客户端连接

  问题:服务器程序与应用程序之间如何交互规则 ,wsgi服务器网关接口(生产的uwsgi ,django默认使用了wsgiref))

  https://blog.csdn.net/qq_38038143/article/details/80291234   nginx+uwsgi+django

6.python的其他框架

  django完成了业务逻辑代码+动态页面返回

  flask完成了业务逻辑代码

  tornado完成了服务器程序+业务逻辑代码+返回动态页面

7.软件设计架构模式

  1)MVC框架

    controller+model+view

    控制器:业务逻辑 ,访问地址 ,执行函数

    模型: 数据库模型避免sql

    视图: 展示的动态页面

  2)MTV框架

    django根据mvc重新设计了一下model+templates+view

    模型: orm数据库对象关系模型

    模板: 负责展示给用户的页面

    视图: 负责业务逻辑

    额外的: url路由分发器

  二者比较:

    mvc可以说是广义 ,控制器对应mtv的视图函数与路由 ,视图对应模板 ,模型一直

8.django中的request与reponse对象

  request请求对象是视图函数中的必要参数 ,对象封装了本次请求的http协议中的所有相关信息

    request.method          #请求类型, 在cbv中dispatch方法会将该类型与已知列表匹配 ,反射获取我们自定义的方法执行

    request.GET.get('关键字')       #从GET请求中获取参数 ,可以获取url中?后面的参数

    request.GET.urlencode()      #获取GET请求上的参数 ,并进行编码

    request.POST.get('关键字')     #从POST请求中获取表单中的内容值 ,表单中提交的内容可以根据这个方法获取

    request.path_info          #获取请求路径信息 ,不包含地址端口 ,?后的参数

    request.body            #请求体 ,仅post请求有 ,有明文的请求数据

    request.scheme          #本次请求协议 http https

    request.encoding           #获取提交数据的编码方式

    request.COOKIES         #获取COOKIES

    request.session           #获取session信息

    request.FILES           #用于上传文件 ,需要放入form表单中 且enctype="multipart/form-data"   

  response响应的几种方式

    HttpResponse('字符串')       #可以直接返回html标签 或字符串

    render(request ,'模板文件名' ,{'参数1':1,'参数2':2})  #返回模板页面 ,还可以返回request对象和参数给模板文件名

    redirect(重定向)           #重定向到其他url

    JsonResponse(data,safe=False)                       #将数据转为json类型返回 ,如果数据是字典可以不加safe=False

    

9.文件上传简例

####urls.py
url(r'^file/', views.file.as_view(), name='file'),
####views.py
class file(View):
def post(self, request):
upfile = request.FILES.get('upfile')
with open('testfile.txt', mode='w', encoding='utf-8') as f1:
for i in upfile.chunks():
f1.write(i.decode('utf-8'))
return HttpResponse('上传完成')
####html模板
<form action="{% url 'file' %}" enctype="multipart/form-data" method="post">
<input type="file" name="upfile"> <button type="submit">上传</button>
</form>

  

django1-web开发基础知识的更多相关文章

  1. Web开发基础知识

    综述 最近开始Java Web方面的工作,千里之行始于足下,我们在开发过程中要善于总结自己遇到的问题.善于管理一些优秀的代码片段.本文的主要内容是Web开发的基础知识,对于大牛来说可以忽略,对于初入W ...

  2. web前端基础知识及快速入门指南

    web前端基础知识及快速入门指南 做前端开发有几个月了,虽然说是几个月,但是中间断断续续的上课.考试以及其它杂七杂八的事情,到现在居然一直感觉自己虽然很多前端的知识很眼熟,却也感觉自己貌似也知识在门口 ...

  3. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是整个IM系统都是以长 ...

  4. linux web服务基础知识,dns

    #web服务基础知识c/s 客户端/服务器b/s 浏览器/服务器 nginx   >   web  server  服务端浏览器  >    web  client  客户端 #dns解析 ...

  5. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  6. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  7. 移动端 Web 开发前端知识整理

    文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...

  8. iOS开发——总结篇&IOS开发基础知识

    IOS开发基础知识 1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断 ...

  9. [置顶] 提高生产力:Web开发基础平台WebCommon的设计和实现

    Web开发中,存在着各种各样的重复性的工作.为了提高开发效率,不在当码农,我在思考和实践如何搭建一个Web开发的基础平台. Web开发基础平台的目标和功能 1.提供一套基础的开发环境,整合了常用的框架 ...

  10. Ext常用开发基础知识

    Ext常用开发基础知识 组件定义 //这种方法可以缓存所需要的组件 调用起来比较方便(方法一 ) Ext.define('MySecurity.view.home.HomePanel', { //添加 ...

随机推荐

  1. 《ServerSuperIO Designer IDE使用教程》- 7.增加机器学习算法,通讯采集数据与算法相结合。发布:4.2.5 版本

    v4.2.5更新内容:1.修复服务实例设置ClearSocketSession参数时,可能出现资源无法释放而造成异常的情况.2.修复关闭宿主程序后进程仍然无法退出的问题.2.增加机器学习框架.3.优化 ...

  2. kmeans均值聚类算法实现

    这个算法中文名为k均值聚类算法,首先我们在二维的特殊条件下讨论其实现的过程,方便大家理解. 第一步.随机生成质心 由于这是一个无监督学习的算法,因此我们首先在一个二维的坐标轴下随机给定一堆点,并随即给 ...

  3. 37-Data Volume 之 bind mount

    storage driver 和 data volume 是容器存放数据的两种方式,上一节我们学习了 storage driver,本节开始讨论 Data Volume. Data Volume 本质 ...

  4. 利用phpqrcode二维码生成类库合成带logo的二维码并且用合成的二维码生成海报(二)

    前期准备 引入phpqrcode类库(下载地址:https://download.csdn.net/download/weixin_37557729/11891240:支持彩色二维码的下载地址:htt ...

  5. Java学习笔记(7)---流(Stream),文件(File)

    1.Stream流 a.定义: Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集 ...

  6. nginx配合gotty的websocket连接配置

    由于gotty我作了url加密, 所以url在nginx里的前缀要能替换才行. 配置关键就在于有没有/ #user nobody; worker_processes 1; #error_log log ...

  7. ajax给全局变量设置值,请先关掉异步上传效果

    $.ajax({ type: 'POST', url: "/downloadExcelInfo", timeout: 0, async: false, contentType: & ...

  8. Leetcode 90. 子集 II

    地址  https://leetcode-cn.com/problems/subsets-ii/ 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重 ...

  9. <DFS & BFS> 286 339 (BFS)364

    286. Walls and Gates DFS: 思路是,搜索0的位置,每找到一个0,以其周围四个相邻点为起点,开始 DFS 遍历,并带入深度值1,如果遇到的值大于当前深度值,将位置值赋为当前深度值 ...

  10. 17个经典的Spring面试问答

    Q1.什么是Spring Framework? Spring是Java企业版应用程序开发中使用最广泛的框架.Spring的核心功能可用于开发任何Java应用程序. 我们可以使用它的扩展来在Java E ...