day18_雷神_django第一天
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: v1
k2: v2
请求体'
HTTP响应(response)格式
消息格式:
协议版本 状态码 状态描述符
k1: v1
k2: 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模块 部署:uwsgi
flask 自己实现了2
tornado 自己实现了1,2,3
分类:
1. Django
2. 其他
3、 Django (d不发音)
3. 下载Django
1. 命令行
pip3 install django==1.11.15
2. pycharm安装
4. 创建项目
1. 命令行
django-admin startproject 项目名
2. pycharm
5. 启动项目
1. 命令行
cd 项目目录下
python manage.py runserver # 127.0.0.1:8000
python manage.py runserver 80 # 127.0.0.1:80
python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80
2. pycharm
6. APP
创建APP
1. python manage.py startapp APP名字
注册APP
2. 在settings.py
INSTALLED_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=123
2. 响应
新手必备三件套
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. ORM
1. pymysql连接数据库
1.import pymysql
2. 创建一个连接
3. 创建一个光标
4. 执行SQL语句
5. 得到sql的结果
6. 关闭光标
7. 关闭连接
2. ORM
1. 优点
不用写SQL
2. 缺点
1. 只能完成一部分操作
2. 效率低
3. 是什么?
对应关系
类 表
对象 记录
属性 字段
4. ORM的功能:
1. 操作数据表
2. 操作数据行
5. 使用ORM
1. 创建一个数据库
2. 配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 's22day18',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
3. 在项目同名的文件夹下的__init__.py中写代码:
import pymysql
pymysql.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第一天的更多相关文章
- day24_雷神_django项目部署
# django项目部署 ... curl -I www.baidu.com 得到响应头信息 vim 里shift + % 找括号的另一半 find / -name virtualenv 3.创建虚拟 ...
- day19_雷神_django第二天
django_day02 Django的路由系统 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 1.URLconf配置 基本 ...
- day21_雷神_django第四天
django第四天 1.form组件 解决两个事情: 不想重复提交,数据重置: 校验规则 流程: (1) 创建form组件对应的类,比如LoginForm (2) views.login: if ge ...
- day20_雷神_django第三天
django第三天 动态路由,实现统一删除功能 urls url(r'^host_del/(host|user|group)/(\d+)$',views.host_del,name='del'), t ...
- 【原】Python学习_Django搭建环境及创建第一个项目
1.Window 平台安装 Python 下载安装包 https://www.python.org/downloads/windows/ 2.Pyhton环境变量配置 右键点击"计算机 ...
- 【雷神源码解析】无基础看懂AAC码流解析,看不懂你打我
一 前言 最近在尝试学习一些视频相关的知识,随便一搜才知道原来国内有雷神这么一个真正神级的人物存在,尤其是在这里(传送门)看到他的感言更是对他膜拜不已,雷神这种无私奉献的精神应当被我辈发扬光大.那写这 ...
- 问题 A: 雷神领域
传送门 题目描述 L君,S大陆首屈一指的天才魔法师,创造了一个新魔法:雷神领域. 这个魔法会首先在地面上形成正方网格魔法阵列,然后在某些位置召唤雷电轴标.注意:一个位置只能有一个雷电轴标存在. 雷电 ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...
随机推荐
- mysql学习笔记--遇到的坑
一.navcat 连接不支持密码输入 1. 先通过命令行进去mysql的root账户 mysql -uroot -p'password' 2. 更改加密方式 alter user 'root'@'lo ...
- hdu 3065 AC自动机 标记数组不清零
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目里面要我们计算每种单词出现的次数,重叠的也要计算,那么我们在查找的时候不要把标记单词结尾的 ...
- tomcat关闭时Log4j2报错 Log4j Log4j2-TF-4-Scheduled-1 memory leak
出错信息: 23-Sep-2017 17:43:18.964 警告 [main] org.apache.catalina.loader.WebappClassLoaderBase.clearRefer ...
- Git冲突标记介绍
<<<<<<< head 是指你本地的分支的 <<<<<<< HEADb789=======b45678910> ...
- node 常用模块及方法fs,url,http,path
http://www.cnblogs.com/mangoxin/p/5664615.html https://www.liaoxuefeng.com/wiki/001434446689867b2715 ...
- 7F - 无限的路
甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接触,所以甜甜只会用它来画直线,于是他就在平面直角坐标系中画出如下的图形: 甜甜的好朋友蜜蜜发现上面的图还是有点规则的,于是他问甜甜:在你画的图中 ...
- HTML-CSS背景渐进色
一.分类 a>线性渐变:颜色沿着一条直线过度:从 左到右.从上到下等: b>径向渐变:圆形或椭圆形渐变,颜色不再沿着一条直线变化,而是从一个起点朝所有方向混合. 1.线性渐变语法: bac ...
- Java发送手机短信(附代码和解析,亲测有效,简便易操作)
这个方法用的是中国网建SMS短信通相关依赖进行操作的~~ 很简单,仅需要三步,第二部代码直接复制,不需要修改,第三部中的用户名和密钥修改成自己的即可 <1> 首先需要导入三个jar包 &l ...
- 详解js跨域
什么是跨域? 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域. 对于端口和协议的不同,只能通过后台来解决.URL 说明 是否允许通信 http://www.a.com/a.js http ...
- 【转】Android总结篇系列:Activity启动模式(lauchMode)
[转]Android总结篇系列:Activity启动模式(lauchMode) 本来想针对Activity中的启动模式写篇文章的,后来网上发现有人已经总结的相当好了,在此直接引用过来,并加上自己的一些 ...