Python学习之路—2018/6/14

Python学习之路—2018/6/14

1.浏览器与服务器

浏览器向服务器发送请求的过程为请求过程,服务器向浏览器响应的过程为响应过程。

2.简单的web应用程序

import socket

sock = socket.socket()
sock.bind(("100.113.14.43", 8080))
sock.listen(5)

with open("index.html", "r") as f:  # 先将样式写入html文件中,然后再读取发送给浏览器
    content = f.read()

while True:
    print("server starting...")
    conn, addr = sock.accept()
    data = conn.recv(1024)
    print("data:", data)
    conn.send(("HTTP/1.1 200 OK\r\n\r\n%s" % content).encode("utf8"))  # http协议格式
    conn.close()
sock.close()

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Hello World</h1>
    <img src="https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50/sign=a102dc900f24ab18f41be96554938da8/8b82b9014a90f60380e9a5f13f12b31bb051ed2f.jpg">
</body>
</html>

接下来用浏览器访问100.113.14.43:8080

3.请求协议

请求格式

get与post区别

  • get主要用于获取数据库数据,当对数据库数据进行更新时使用post
  • get无请求体,提交的数据放入url后面,通过?分隔,参数之间通过&连接,例如100.113.14.43:8080/gyq?name=gyq&age=22;post提交的数据存放在请求体中
  • 由于url长度有限,所以get提交的数据大小有限制;post提交数据大小没有限制

    响应协议?

响应格式

响应状态码

类型 原因
1XX Information(信息) 请求正在处理
2XX Success(成功) 请求处理完毕
3XX Redirection(重定向) 需要进行附加操作以完成请求
4XX Client Error(客户端错误) 服务器无法处理请求
5XX Server Error(服务器错误) 服务器处理请求错误
from wsgiref.simple_server import make_server

def appliaction(environ, start_response):
    # environ:按照http协议解析数据
    # strat_response:按照http协议组装数据
    path = environ.get("PATH_INFO")
    start_response("200 OK", [])
    with open("index.html", "rb") as f:
        data1 = f.read()
    with open("login.html", "rb") as f:
        data2 = f.read()
    if path == "/index":
        return [data1]
    elif path == "/login":
        return [data2]
    else:
        return [b"<h1>哈哈哈</h1>"]

httpd = make_server("", 8090, appliaction)
print("server starting..")
# 开始监听
httpd.serve_forever()

原文地址:https://www.cnblogs.com/ExBurner/p/9181629.html

时间: 2024-08-27 12:56:10

Python学习之路—2018/6/14的相关文章

Python学习之路—2018/6/19

Python学习之路-2018/6/19 1.注册自定义转化器 converts.py class Birthday: regex = '[0-9]{8}' # 匹配规则 def to_python(self, value): # 匹配的字符串返回具体的变量值,传递到对应的视图函数中 return int(value) def to_url(self,value): # 反向解析 return "%04d" % value urls.py from django.urls import

Python学习之路—2018/6/26

Python学习之路-2018/6/26 1.ORM 单表操作 删除与修改记录 >>> ret = Book.objects.filter(title="go").delete() (1, {'app01.Book': 1}) >>> Book.objects.filter(price=115).update(price=120) 多表操作 创建模型 一对一 models.OneToOneField(to="表名", on_del

Python学习之路—2018/6/29

Python学习之路-2018/6/29 1.跨表查询 跨表查询: 基于对象查询 基于双下划线查询 聚合和分组查询 F与Q查询 F查询 过滤器只能讲字段值与常量进行比较,如果需要用到与字段值进行比较则需要用到F查询,F查询还支持与常量之间的加减乘除的运算.数据: # 查询评论数大于阅读数的书籍 >>> Book.objects.filter(comment_count__gt=F("read_count")) <QuerySet [<Book: 斗破苍穹&

Python学习之路—2018/7/10

Python学习之路-2018/7/10 博客开发项目流程 ? 一般来说,一个项目的开发流程分为:项目需求.设计表结构.功能开发.测试功能.产品上线,本次学习以博客园为蓝本进行开发. 1.项目需求 博客的开发的需求主要有以下几点: 基于auth模块和Ajax实现登录验证 基于forms组件和Ajax实现注册功能 设计博客首页 设计个人站点页面 设计文章详情页面 实现文章点赞功能 实现文章的评论功能,包括对文章的评论以及对文章评论的评论 实现富文本编辑框 防止xss攻击(例如当用户的文章中含有JS

Python学习之路—2018/7/11

Python学习之路-2018/7/10 3.功能开发 3.1 登录验证 login.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <t

Python学习之路-Day1-Python基础

Python学习之路第一天 学习内容: 1.Python简介 2.安装 3.第一个Python程序 4.变量 5.字符编码 6.用户输入 7.表达式if..else语句 8.表达式for语句 9.break和continue 10.while循环 11.字符串格式化 1.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOB

Python 学习之路(二)

Python 学习之路(二) 以下所用的是Python 3.6 一.条件语句 简单判断 1 if 判断条件: 2 执行语句-- 3 else: 4 执行语句-- 复杂判断 1 if 判断条件1: 2 执行语句1-- 3 elif 判断条件2: 4 执行语句2-- 5 elif 判断条件3: 6 执行语句3-- 7 else: 8 执行语句4-- 二.循环语句 2.1 while语句 和其他语言一样,不同的是多了else语句.在 python 中,while - else 在循环条件为 false

Python学习之路

Python学习之路 目录 Python学习之路[第一篇]:流程控制,用户交互,语法要求,变量,字符,注释,模块导入的使用 Python学习之路[第二篇]:文件,字符串,列表,元组,字典,集合的使用 更新中...

Python学习之路-装饰器&生成器&正则表达式

装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器, def login_decorator(func):     def inner():         if USER_TEMP["status"] == False:             print("\033[31;1m用户未登录,请先登录\033[0m")             login_atm()