HTTP协议补充

四大特性:

  1. 基于请求响应
  2. 基于TCP/IP协议之上的应用层协议
  3. 无状态 不能保存用户信息(cookie,session,token)
  4. 短链接

请求数据格式:

请求首行(请求方式,http版本)
请求头
\r\n
请求体(post请求有,get没有)

响应数据格式

响应首行(状态码)
响应头
\r\n
响应体

响应状态码(http协议规定)

200 请求成功 OK
404 请求数据不存在
500 服务器内部错误

业务状态码

一般规定一个正确的,只规定200是正确,其他的全部为异常

eg:
1.用户名不存在
2.验证码错误
1)随机生成 458965
2)校验验证码
存入验证码到数据库(MySQL),表结构
id, code, phone create_time
1 123456 110 2021-10-01 10:10:10
2 123457 110 2021-10-01 11:10:10
3 123458 110 2021-10-01 12:10:10
redis也可以存
如果不限制一天当中,不限制发送次数
存到session中 3.密码错误 json.dumps({}) crm,11 财务12,销售13,主站
def index() user_dic = {'code':121001, 'msg':'验证码错误','data':[]}
user_dic = {'code':121002, 'msg':'用户名不存在','data':[]}
user_dic = {'code':121003, 'msg':'密码错误','data':[]} # 如果都正确
user_dic = {'code':200, 'msg':'OK','data':[]}
return JSONrESPONSE(user_dic)
"""

web简易版框架

import socket

server = socket.socket()  # TCP
server.bind(('127.0.0.1', 8080)) server.listen(5) while True:
sock, addr = server.accept() # 接收浏览器发送过来的数据
data = sock.recv(1024) # 如果超过1024的数据,出现粘包现象
print(data) sock.send(b'HTTP/1.1 200 OK \r\n\r\n') data = data.decode('utf-8')
current_path = data.split(' ')[1] # ['GET', '/login/', ''] """
需求:输入不同的后缀,返回不同的内容
1. 知道用户输入的后缀? 2. 做判断,
if path == '/index'
:return 'index'
:return index()
""" # 判断
if current_path == '/index/':
sock.send(b'index')
elif current_path == '/login/':
sock.send(b'login')
else:
# 向浏览器发送数据
sock.send(b'404') sock.close()

wsgiref模块

简易版本

# uwsgi  WSGI wsgiref

from wsgiref.simple_server import make_server

from urls import urls
def run(env, response):
""" :param env: 请求相关的数据
:param response: 响应相关的
:return: 返回值
"""
print(env) # 大字典格式,帮我们封装了http请求过来的所有数据
"""
输入不同的后缀,返回不同的内容
"""
response('200 OK', []) current_path = env.get('PATH_INFO') # /index/
# if current_path == '/index/':
# res = index() # /index/
# # return [b'index']
# return [res.encode('utf-8')]
# elif current_path == '/login/':
# return [b'login']
# return [b'404']
func = None
for url in urls:
# url => ('/index', index),
# current_path => /index /login
if current_path == url[0]: # /index
func = url[1]
break # func => None , index, login reg 函数内存地址
if func:
res = func()
return [res.encode('utf-8')]
# return [res]
else:
return [b'404'] if __name__ == '__main__':
server = make_server('127.0.0.1', 8080, run)
"""
相当于帮我们实现了socket服务端
实时监听 127.0.0.1:8080,
当请求来的时候,全部交给run方法
注意:
run方法有两个参数
""" server.serve_forever() # 启动服务端
内部本质:帮我们写了socket服务端

"""
urls.py => 后缀
views.py => 函数
templates => 存html文件 也叫模板
""" 如果在让你加功能,只需要在urls.py中添加一个路径,然后在views中写逻辑就可以了

Django框架

python中主流框架
1. django
特点:大而全,重量级框架
缺点:笨重
2. flask
特点:小而美,轻量级框架,
缺点:依赖于第三方的模块
3. tornado
特点:异步非阻塞,解决高并发问题
缺点:难

创建Django框架

# 1、cmd命令行创建
1. # django-admin startproject mysite
2.启动项目
必须切到项目目录下,跟manage.py同级目录下面 # python3 manage.py runserver
3.创建应用
Next, start your first app by running python manage.py startapp [app_label]. # python3 manage.py startapp app01 # 2、pycharm创建# 命令行创建和pyacharm创建的区别 1.pycharm多了一个templates文件 2. # 命令行创建 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], } # pycharm创建的 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] } #####################注意事项############################### 创建完应用之后,必须在下面注册应用 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config', 'app01' ] ####################################################

应用介绍

# 项目就相当于是一所大学应用就相当于是二级学院	1. 计算机学院    2. 土木工程    3. 食品工程    ....    eg:    淘宝为例子    	1. 用户相关的   user        2.订单相关		order        3.地址相关		address        4. 商品相关		goods       # 应用名一定要见名知意### 一个项目至少有一个应用

Django推导 安装等的更多相关文章

  1. Ubuntu14.04 Django Mysql安装部署全过程

    Ubuntu14.04 Django Mysql安装部署全过程   一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便 ...

  2. 跟我一起Django - 01 安装和初始化

    跟我一起Django - 01 安装和初始化 python环境 C:\Python27\Lib\site-packages>python --versionPython 2.7.5 安装setu ...

  3. 【django入门教程】Django的安装和入门

    很多初学django的朋友,都不知道如何安装django开发以及django的入门,今天小编就给大家讲讲django入门教程. 注明:python版本为3.3.1.Django版本为1.5.1,操作系 ...

  4. Linux下Django的安装

    1.下载Django.地址:https://www.djangoproject.com/download/ 2.解压3中得到的Django-1.6.2.tar.gz.使用下面的命令进行解压,解压后在当 ...

  5. Django的安装配置和开发

    参考:<Django Web开发指南> Django的安装配置 1.https://www.djangoproject.com/download/下载Django-1.5.1.tar.gz ...

  6. Django的安装和启动以及第一个工程的建立

    ---恢复内容开始--- 前提:已经安装了python和Anaconda (windows系统) 在Anaconda安装好之后,其文件夹下有一个叫做Anaconda Prompt的工具,类似windo ...

  7. Django:安装和启动

    最近在学习利用python语言进行web站点开发,使用的框架是Django.这篇博客主要介绍Django的安装和简单使用. 一.Django介绍 Django是一个开源的Web应用框架,由Python ...

  8. Linux的基础命令, django的安装与使用

    一. Linux一些基础指令 cat命令, 用于查看纯文本文件(常用于内容较少的) cat 校花的故事.txt # 查看文件 cat -n 校花的故事.txt # 查看文件并显示行号 -n 显示行号 ...

  9. centos安装Django之四:安装Django

    前面我们学会了centos安装Django之一:安装openssl和centos安装Django之二:pip3安装,centos安装Django之三:安装python,现在我们就可以安装Django了 ...

随机推荐

  1. 15 shell for循环

    除了 while 循环和 until 循环,Shell 脚本中还有for 循环,for 循环有两种使用形式:C语言风格的for循环与Python语言风格的for in循环,两种形式的for循环用法对比 ...

  2. charles证书导入系统信任区(Android7.0以上)

    打开charles,跟着下图来,下载好charles的证书 后缀是pem的格式,挺方便的了,burp的证书是der的,还需要再进一步转化成pem,这里就不再多说, 利用openssl来计算出文件名 加 ...

  3. Jenkins 进阶篇 - 参数化构建

    我们在构建任务时经常会遇到这样的情景,一个任务配置好了以后,在后面的构建过程中,又会修改一些配置.例如,我们构建项目的代码可能是拉取指定的分支或者是Tag进行构建,又或者是在构建是需要指定特定的运行平 ...

  4. IO流之节点流(字节流)

    节点流可以分为:字节节点流和字符节点流 数据源直接到程序的成为节点流(低级流) 字节流 输入流----InputStream InputStream 是输入流的抽象父类,若创建对象,需new它的子类 ...

  5. [XIN算法应用]NOI2020美食家

    XIN(\(updated 2021.6.4\)) 对于很多很多的题目,发现自己并不会之后,往往会直接冲上一个XIN队算法,然而,这样 \(\huge{\text{鲁莽}}\) 的行为只能获得 TLE ...

  6. redis的单线程

    一.redis为什么这么快 1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1):2.数据结构简单 ...

  7. Win10强制程序高DPI缩放设置

    起因 工作原因,需要在win10上安装数个古老vc版本(vc6,vc2008,vc2010),但是显示器是2K的,DPI缩放有问题 尝试 VC6比较好解决:右键,属性,兼容性,更改高DPI设置,勾选替 ...

  8. vue3源码难学,先从petite-vue开始吧

    如今这个世道,作为一个有几年工作经验的前端,不学点框架源码都感觉要被抛弃了,react或vue要能吹吹牛吧,最好能造个轮子,听说vue3源码好学点,那么学学vue3,但是学起来还是那么费劲,感觉快放弃 ...

  9. c++ 的父类 new 重载, 子类new 对象的时候会调用父类的operater new

    子类在new 对象的 时候  父类的new 进行了重载,那么会调用父类的operater new() 函数 #include <iostream> #include <string& ...

  10. Python - 详解 range()

    介绍 range 是一个类,不是函数 表示不可变的数字序列,通常用于在 for 循环中循环指定的次数 两种语法格式 range(stop) 表示区间 [0, stop) 内的整数序列 该区间从 0 开 ...