# django_day01

1、http 协议

超文本传输协议,HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信。

协议概述

HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络,
爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为
用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务
器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网
关或者隧道(tunnel)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用它或它支持的层。事实上,HTTP
可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种
保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则
在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",
以及返回的内容,如请求的文件、错误消息、或者其它信息。

工作原理

以下是 HTTP 请求/响应的步骤:1. 客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,
http://www.luffycity.com。2. 发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求
数据4部分组成。3. 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响
应头部、空行和响应数据4部分组成。4. 释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若
connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;5. 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为
若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并
在浏览器窗口中显示。

http请求方法

HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

GET

向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例
如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

HEAD

与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,
使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

POST

向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请
求可能会创建新的资源或修改现有资源,或二者皆有。

CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

注意: 方法名称是区别大小写的

HTTP状态码

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。状态代码的第一个数字代表当前响应的类型:1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误

HTTP请求(request)格式

消息格式:'请求方法 URL 协议版本k1: v1k2: v2请求体'

HTTP响应(response)格式

消息格式:协议版本 状态码 状态描述符k1: v1k2: v2响应体(HTML页面) 

2、 web 框架的原理

web 框架本质

我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。
这样我们就可以自己实现Web框架了。

服务器程序和应用程序

对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序。服务器程序负责对socket服务端进行封装,并在请求到来时,对请求的各种数据进行整理。应用程序则负责具体的逻辑处理。为了方便应用程序的开发,就出现了众多的Web框架,例如:Django、Flask、
web.py 等。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为
用户提供服务。这样,服务器程序就需要为不同的框架提供不同的支持。这样混乱的局面无论对于服务器还是框架,都是不好
的。对服务器来说,需要支持各种不同框架,对框架来说,只有支持它的服务器才能被开发出的应用使用。这时候,标准化就变得尤为重要。我们可以设立一个标准,只要服务器程序支持这个标准,框架也支持这个标
准,那么他们就可以配合使用。一旦标准确定,双方各自实现。这样,服务器可以支持更多支持标准的框架,框
架也可以使用更多支持标准的服务器。WSGI(Web Server Gateway Interface)就是一种规范,它定义了使用Python编写的web应用程序与web
服务器程序之间的接口格式,实现web应用程序与web服务器程序间的解耦。常用的WSGI服务器有uwsgi、Gunicorn。而Python标准库提供的独立WSGI服务器叫wsgiref,Django开发环
境用的就是这个模块来做服务器。

web框架

    功能:1. socket收发消息       服务器程序   uwsgi  Gunicorn应用程序2. 根据不同的URL返回不同的页面(URL和函数对应关系) 3. 动态的页面(字符的替换) python web的分类Django    自己实现2,3 使用第三方的  开发阶段: wsgiref模块    部署:uwsgiflask     自己实现了2  tornado   自己实现了1,2,3分类:1. Django2. 其他

3、 Django (d不发音)

3. 下载Django1. 命令行pip3 install django==1.11.152. pycharm安装4. 创建项目1. 命令行django-admin startproject 项目名2. pycharm5. 启动项目1. 命令行cd  项目目录下python manage.py runserver # 127.0.0.1:8000python manage.py runserver  80  #  127.0.0.1:80python manage.py runserver  0.0.0.0:80  #  0.0.0.0:802. pycharm6. APP创建APP1. python manage.py startapp  APP名字注册APP2.  在settings.pyINSTALLED_APPS = ['app01','app02.apps.App02Config']7. 路由系统(URL和函数的对应关系)urlpatterns = [url(r'^admin/', admin.site.urls),url(r'index',views.index)]从上往下进行匹配第一个参数是正则8. 视图函数1. request  封装了请求所有的东西 request.path_info       ——》URL路径request.method          ——》请求方式request.POST            ——》POST提交的数据  { }request.GET             ——》URL上的参数   /login/?username=alex&passwor=1232. 响应新手必备三件套1. HttpResponse('home')             —— 返回一个字符串2. render(request,'index.html')     —— 返回一个具体的页面3. redirect(跳转的URL)             ——重定向  响应头 location:'跳转的地址'9. 静态文件的配置STATIC_URL = '/static/'  # 别名   /static999/STATICFILES_DIRS= [os.path.join(BASE_DIR,'static')]10. ORM1. pymysql连接数据库1.import pymysql2. 创建一个连接3. 创建一个光标4. 执行SQL语句5. 得到sql的结果6. 关闭光标7. 关闭连接2. ORM 1. 优点不用写SQL 2. 缺点1. 只能完成一部分操作2. 效率低 3. 是什么?对应关系类       表 对象      记录属性      字段4. ORM的功能:1. 操作数据表2. 操作数据行 5. 使用ORM1. 创建一个数据库2. 配置DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 's22day18','USER': 'root','PASSWORD': '','HOST': '127.0.0.1','PORT': 3306,}}3. 在项目同名的文件夹下的__init__.py中写代码:import pymysqlpymysql.install_as_MySQLdb()4. 在app下的models.py中写类:class Publisher(models.Model):nid = models.AutoField(primary_key=True)name = models.CharField(max_length=16)5. 执行数据库迁移的命令python manage.py makemigrations    # 保存APP下的models.py的变更记录pyhton manage.py migrate           # 将变更记录同步到数据库中3. ORM操作1. 查询 获取所有数据models.Publisher.objects.all()      —— 》 queryset  对象列表获取满足条件的所有数据数据models.Publisher.objects.filter(name='xxx')  —— 》 queryset  对象列表排序models.Publisher.objects.all().order_by('id')    —— 》 queryset  对象列表  升序models.Publisher.objects.all().order_by('-id')   —— 》 queryset  对象列表  降序序获取一个对象models.Publisher.objects.get(nid=1)# 获取不到或者获取多个就报错2. 增加models.Publisher.objects.create(name='xxxxx')   —— 》成功插入的对象 3. 删除models.Publisher.objects.filter(nid=nid).delete()  ——》 删除满足条件的所有对象models.Publisher.objects.get(nid=nid).delete()     ——》 删除对应的对象4. 修改pub_obj = models.Publisher.objects.get(nid=nid)pub_obj.name = 'xxxx'pub_obj.save()  # 写入数据库11. 模板语法{{ 变量 }}  {{ pub_obj.name }}{{ pub_obj.id }}{% for i in pub_list %}{{ forloop.counter }}   # 当前循环的次数<tr>{{ i }}</tr>{% endfor %}

day18_雷神_django第一天相关推荐

  1. day24_雷神_django项目部署

    # django项目部署 ... curl -I www.baidu.com 得到响应头信息vim 里shift + % 找括号的另一半find / -name virtualenv3.创建虚拟主机定 ...

  2. day19_雷神_django第二天

    django_day02 Django的路由系统 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 1.URLconf配置 基本 ...

  3. Python使用“漫威API”探索漫威宇宙

    在看漫威系列电影的时候,你是不是经常会对一些角色感到好奇,想知道每个角色的关联关系和出场的事件,但是却无从下手? 现在,我们有很好的库来帮助我们实现这些想法了!Marvel Comics API 允许 ...

  4. 高性能游戏本搭服务器,五款高性能游戏本推荐 爽玩各类3A大作

    高端游戏本虽然价格昂贵,但相对于普通游戏本来说,在性能方面自然有着更为出色的表现.而想要在游戏中体验流畅的画面以及精致的画质,一台高性能游戏本必不可少.目前来看,高端游戏本都已经升级到RTX 20系独 ...

  5. Python深度学习篇

    Python深度学习篇一<什么是深度学习> Excerpt 在过去的几年里,人工智能(AI)一直是媒体大肆炒作的热点话题.机器学习.深度学习 和人工智能都出现在不计其数的文章中,而这些文章 ...

  6. 雷神科技新三板挂牌仪式在京举行 “游戏生态”第一股强势起航

    11月15日,被称为"游戏生态第一股"的雷神科技新三板挂牌仪式在全国中小企业股份转让系统中心成功举行.海尔集团及海通证券相关领导.股东代表.公司高管出席了本次仪式,周兆林董事长敲响 ...

  7. python运行一个项目_Django 项目创建到启动(最全最详细的第一个项目)

    一.前言 (一).概述 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架 ...

  8. 我の第一篇万字博文 | 带大家开开心心地进入Python世界

    文章目录 前言 配置环境 创建 Python 文件 Hello world 伴我们一生的变量 变量到底是什么 变量的名字有讲究 敲一敲 简单数据类型 字符串 字符串的方法 字符串的拼接 关于空白 敲一 ...

  9. iphone最新款手机_苹果罕见“跌停”!遭遇6年来最惨淡一夜,2019年全球股市第一颗雷引爆...

    2019年全球股市的第一颗大雷引爆了. 受苹果下调营收预期影响,周四盘中,苹果股价一度跌至142.08美元,创逾一年半新低,日内跌幅超过10%,市值缩水750亿美元.最终,苹果收跌9.96%,创出自2 ...

最新文章

  1. python 下划线转驼峰
  2. 命令行客户端MySQL基本命令的使用(登录、登出、数据库操作的SQL语句、表结构的SQL语句、表数据操作的SQL语句)
  3. 如何leangoo看板工具做可视化工作流
  4. 3D姿态估计|时序卷积+半监督训练
  5. Android Studio停留在“Indexing paused due to batch update”的解决方案
  6. linux中快速查找文件
  7. 清洁代码_清洁单元测试
  8. DTC跨境电商白皮书
  9. Java统计文件行数
  10. 自动驾驶—全局定位的学习笔记
  11. 线程创建 pthread_create 中自定义参数注意事项
  12. 用Log Explorer恢复数据的基本操作
  13. 【论文阅读】强化学习-Transfer and Multitask RL专题8篇
  14. 通俗理解动态库与静态库区别
  15. 计算机主板电源接口8pin,主板供电篇——CPU辅助电源
  16. 红蓝眼睛(答案在文章中找)
  17. SylixOS网卡驱动实现篇
  18. Linux SVN “db/txn-current-lock: Permission denied”
  19. android系统自带system/app下载,Android 把应用APK安装包放到system/app下的方法
  20. 深度学习—数据处理常用代码Python合集

热门文章

  1. 从‘心’出发,乐跑向前——德州站健心跑公益活动盛大开跑
  2. 一文读懂循环冗余校验(CRC)原理
  3. 远程桌面计算机用户名,远程桌面设置及使用
  4. Jenkins Mac本地环境搭建
  5. 广电网络宽带电视网关简介与优化设置
  6. 如何撰写发明专利?(全流程解析+要点总结)
  7. 项目管理基础:10.项目沟通管理
  8. Android 应用(8)——使用Ubuntu制作APP签名文件并对应用签名
  9. 央视CCTV摄制组进驻领存深入报道
  10. RepVGG: Making VGG-style ConvNets Great Again