简介

1.前端

   与用户打交道的界面

2.web框架

   可以将前端和数据库整合到一起

3.数据库

   专门用于存储数据

内容概要


  • 纯手撸web框架
  • 基于wsgiref模块
  • 优化措施
  • 动静态网页
  • jinja2模板
  • 框架请求流程
  • python主流web框架
  • django框架
    • django框架简介
    • django基本使用
    • 应用app
    • django主要文件介绍

内容详情


纯手撸web框架

  1. '''
  2. web框架:将前端、数据库整合到一起的基于互联网传输的python代码
  3. web框架也可以简单的理解为是软件开发架构里面的'服务端'
  4. '''
  5. 1.搭建简易版本服务端
  6. socket模块
  7. 2.遵循HTTP协议
  8. 四大特性、数据格式、响应状态码
  9. 3.基于不同版本的后缀响应不同的内容
  10. 如何获取用户输入的url后缀>>>:HTTP请求数据
  11. /favicon.ico直接忽略 不影响判断
  12. 利用字符串切割和索引取值获取相应数据
  13. import socket
  14. server = socket.socket()
  15. server.bind(('127.0.0.1',8080))
  16. server.listen(5)
  17. while True:
  18. sock,addr = server.accept()
  19. data = sock.recv(1024)
  20. # 将请求相关数据先转成字符串
  21. data_str = data.decode('utf8') # 'GET /login HTTP/1.1\r\nHost: 127.0.0.1:8081\r\n......'
  22. sock.send(b'HTTP1.1 200 OK\r\n\r\n')
  23. # 然后去字符串中截取出我们需要的内容(按照空格切割字符串 获取第二个元素即可)
  24. current_path = data_str.split(' ')[1]
  25. # 根据后缀的不同返回不同的内容
  26. if current_path == '/login':
  27. sock.send(b'hello login!!!')
  28. elif current_path == '/register':
  29. sock.send(b'hello register')
  30. else:
  31. sock.send(b'404 error')
  32. """
  33. 上述框架缺陷:
  34. 1.服务端起始代码过于重复
  35. 2.针对HTTP请求数据没有完善的处理方式
  36. 3.并发量问题
  37. """

基于wsgiref模块

  1. 1.利用模块搭建服务端
  2. 2.利用模块处理好的HTTP字典数据编写业务
  3. 查找用户url后缀对象的键值对数据
  4. from wsgiref import simple_server
  5. def run(request, response):
  6. """
  7. :param request: 请求相关的数据
  8. :param response: 响应相关的数据
  9. :return: 返回给客户端的展示数据
  10. """
  11. # print(request) # 字典类型的数据(模块自动处理HTTP请求数据 便于后续数据获取)
  12. response('200 OK', []) # 固定编写 无需掌握
  13. current_path = request.get("PATH_INFO")
  14. if current_path == '/login':
  15. return [b'hello login html']
  16. elif current_path == '/register':
  17. return [b'hello register html']
  18. return [b'404 error']
  19. if __name__ == '__main__':
  20. server = simple_server.make_server('127.0.0.1', 8080, run)
  21. '''一致监听本机8080端口 一旦有请求访问 自动触发run方法的执行'''
  22. server.serve_forever()

优化措施

  1. 1.如果网站很多 是不是就是以为的添加elif
  2. 2.每个分支下的功能根据业务逻辑的不同可能会比较复杂
  3. """上述两个问题需要做优化处理"""
  4. 将匹配和功能封装成 元组和函数
  5. """所有的代码全部放在一个py文件过于冗余 不便于后期管理维护"""
  6. 根据功能的不同拆分成不同的py文件
  7. urls.py 对应关系的存储
  8. views.py 业务逻辑的编写
  9. # 以后要想新增功能 只需要在urls.py中添加对应关系 view.py中编写函数
  10. """业务函数的代码中 可能会频繁的使用到不同的html页面"""
  11. 为了避免文件类型的混乱 单独开设一个文件夹存储所有的html文件
  12. templates文件夹 存储项目所需的html文件
  13. """项目中的html文件 也有可能需要用到css、js、第三方框架文件"""
  14. html所学的cssjs、第三方框架代码都是写完之后很少做改动的文件 所以可以统一存放在某个文件夹下
  15. static文件夹 存储项目所需的'静态文件'(后续再讲)
  16. 基于上述优化之后 整个项目结构清晰 管理维护都很方便!!!
  1. from wsgiref import simple_server
  2. from urls import urls
  3. from views import error
  4. def run(request, response):
  5. response('200 OK', [])
  6. current_path = request.get("PATH_INFO")
  7. func_name = None
  8. for url_tuple in urls:
  9. if current_path == url_tuple[0]:
  10. func_name = url_tuple[1]
  11. break
  12. if func_name:
  13. res = func_name()
  14. else:
  15. res = error()
  16. return [res.encode('utf8')]
  17. if __name__ == '__main__':
  18. server = simple_server.make_server('127.0.0.1', 8080, run)
  19. server.serve_forever()
  1. # urls
  2. from views import *
  3. urls = (
  4. ('/register', register),
  5. ('/login', login),
  6. ('/func', func)
  7. )
  1. # views
  2. def register():
  3. return 'register'
  4. def login():
  5. return 'login'
  6. def error():
  7. with open(r'templates/404 error.html', 'r', encoding='utf8') as f:
  8. return f.read()
  9. def func():
  10. with open(r'templates/func.html', 'r', encoding='utf8') as f:
  11. return f.read()

动静态网页

  1. 静态网页
  2. 页面上的数据是直接写死的 万年不变
  3. eg:上述项目中编写的 error.html func.html
  4. 动态网页
  5. 页面上的数据是通过代码动态获取的 实时可变
  6. eg:
  7. 1.页面上展示当前时间(后端获取传递给前端界面)
  8. 2.页面上展示数据库数据(后端链接数据库查询数据再传递给页面)
  9. 案例1: 页面上展示当前时间
  10. def get_time(request):
  11. # 1.获取当前时间
  12. import time
  13. c_time = time.strftime('%Y-%m-%d %X')
  14. # 2.读取html文件
  15. with open(r'templates/get_time.html','r',encoding='utf8') as f:
  16. data = f.read()
  17. # 3.思考:如何给字符串添加一些额外的字符串数据>>>:字符串替换
  18. new_data = data.replace('asdaksdjal',c_time)
  19. return new_data
  20. 案例2: 将字典传递给页面 并且在页面上 还可以使用字典的操作方法
  21. jinja2模板语法

jinja2模块

  1. # 第三方模块
  2. pip3 install jinja2
  3. # 功能介绍
  4. 在编写前后端不分离项目的时候 可以使用该模块提供的模板语法简单快速的在html页面是使用类似于后端的代码语法操作数据
  5. # 模板语法
  6. '''目前只做简单了解 后面都会详细的讲!!!'''
  7. from jinja2 import Template
  8. temp_obj = Template(data)
  9. temp_obj.render({'user':user_dict,'new_list':new_list})
  10. <p>{{ user }}</p>
  11. <p>{{ user.name }}</p>
  12. <p>{{ user['pwd'] }}</p>
  13. <p>{{ user.get('hobby') }}</p>
  14. {% for i in new_list %}
  15. <span>元素:{{ i }}</span>
  16. {% endfor %}
  17. # 获取数据库中的数据展示到前端页面
  18. 还是用的上述模板语法

框架请求流程

  1. 参考群内截图:仅限于我们自己编写的web框架(真正的框架其实跟这个差不多)
  2. urls.py
  3. 后缀与函数名对应关系
  4. ('/index',register)
  5. 后缀专业名词称之为'路由'
  6. 函数名专业名词称之为'视图函数'
  7. urls.py专业名词称之为'路由层'
  8. views.py
  9. 专门编写业务逻辑代码
  10. 可以是函数 也可以是类
  11. 函数专业名词称之为'视图函数'
  12. 类专业名词称之为'视图类'
  13. views.py专业名词称之为'视图层'
  14. templates文件夹
  15. 专门存储html文件
  16. html文件专业名词称之为'模板文件'
  17. templates文件夹专业名词称之为'模板层'

python主流web框架

  1. django
  2. 大而全 自带的功能非常的多 但是有时候会略显笨重
  3. 类似于'航空母舰'
  4. flask
  5. 小而精 自带的功能非常的少 但是第三方模块非常的多
  6. 类似于'游骑兵'
  7. # flask的第三方模块加到一起甚至比django还多 并且也越来越像django
  8. # flask由于过多的依赖于第三方模块 有时候也会受制于第三方模块
  9. tornado
  10. 异步非阻塞框架 速度极快 甚至可以用于充当游戏服务器
  11. # 还有一些占比较小 但是也很厉害的框架
  12. fastapisanic......
  13. """
  14. 框架的核心逻辑几乎是一致的 我们在学习的时候只需要先学会一种
  15. 之后就可以触类旁通 但是需要强调的是:千万不用同时学习!!!
  16. """

django框架

django框架简介

  1. # 版本问题
  2. django3.X:默认支持异步功能
  3. django2.X:默认不支持异步
  4. django1.X:默认不支持异步
  5. '''
  6. 我们学习的时候 可以基于django1.11.X版本 与2.X功能几乎一致
  7. 3.X仅仅是多了一个功能(并且该功能目前还不完善 半成品!!!)
  8. '''
  9. django1.11.X LTS 2018年发布
  10. django2.2.X LTS 2020年发布
  11. # 之前使用的是1.11 有些新项目逐步过渡到2.2 自己私下也研究过3.2
  12. # 启动问题
  13. django启动可能报错的原因
  14. 1.计算机名称不能含有中文
  15. 直接修改即可
  16. 2.不同版本的解释器可能会报错
  17. 找到报错信息的最后一行提示对应的代码 删除源文件逗号即可
  18. eg: 解释器推荐使用python3.6 几乎不会报错
  19. 解释器如果是高版本使用django1.11可能会报错
  20. 解释器如果是低版本使用django23也可以报错
  21. 3.项目中所有的文件名称最好使用英文
  22. 4.一个pycharm窗口尽量就是一个完整的项目 不要嵌套
  23. # 下载
  24. pip3 install django==1.11.11
  25. '''如果之前下载了其他版本不用管 自动替换!!!'''

django基本使用

  1. # 验证是否下载成功
  2. cmd窗口直接输入django-admin有反应就是成功了
  3. # 命令操作django
  4. 1.创建django项目
  5. django-admin startproject 项目名(mysite)
  6. 2.启动django项目
  7. cd 项目名(mysite)
  8. python3 manage.py runserver IP:PORT
  9. 3.创建app应用
  10. python3 manage.py startapp 应用名(app01)
  11. '''命令行无法自动创建模板文件夹 需要自己执行命令创建'''
  12. # pycharm操作django
  13. 1.new project
  14. 选择django 填写应用即可
  15. '''pycharm默认会自动帮你创建模板文件夹 并提供创建一个app的功能'''
  16. 2.创建更多的app
  17. tools
  18. run manage.py task 命令自动提示
  19. 3.启动项目
  20. 直接点击绿色箭头
  21. 还可以修改端口号 edit configurations

应用app

  1. django本身类似于是一个空壳子 真正的功能是由里面的各个应用决定
  2. django框架相当于是一所大学 应用相当于是大学里面的各个学院
  3. 大学其实是个壳子 负责提供环境
  4. 学院才是一个个真正具备特定功能的集合
  5. eg:
  6. 使用django写一个淘宝
  7. 淘宝里面有很多功能模块
  8. 我们应该先创建一个空的django项目然后根据功能的不同创建不同的应用
  9. django项目
  10. app01(user)
  11. app02(order)
  12. app03(goods)
  13. app04(backend)

django主要文件介绍

  1. day50_1项目文件名
  2. day50_1同名文件夹
  3. settings.py 项目配置文件
  4. urls.py 路由层
  5. manage.py
  6. django入口文件 很多命令都需要该文件支持
  7. db.sqlite3
  8. django启动之后才会生成的文件 其实就是django自带的小型数据库
  9. templates文件夹
  10. 模板层
  11. app01应用文件夹
  12. migrations文件夹 数据迁移记录(后续讲解)
  13. admin.py django自带的后台管理(后续讲解)
  14. apps.py 用于app的注册(后续讲解)
  15. models.py 专门用于操作数据库(后续讲解 很重要)
  16. views.py 视图层
  17. """
  18. 创建应用之后 一定要去配置文件中注册才能生效
  19. 'app01.apps.App01Config' 完整语法
  20. 'app01' 简写语法
  21. """

django框架1的更多相关文章

  1. MVC其实很简单(Django框架)

    Django框架MVC其实很简单 让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过Web框架来实现的功能与之前的方式有何不同. 下面就是通过使用Django来完成以上功能的例子: 首先,我们 ...

  2. Django框架-目录文件简介

    Rhel6.5 Django1.10 Python3.5 Django框架-目录文件简介 1.介绍Django Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django, ...

  3. Django框架学习

    两个月前学习的Django框架,写了个简易婚恋调查网站,代码就懒得全贴了,有两张图记录下

  4. django框架的models

    在django的框架设计中采用了mtv模型,即Model,template,viewer Model相对于传统的三层或者mvc框架来说就相当对数据处理层,它主要负责与数据的交互,在使用django框架 ...

  5. Windows上python开发--2安装django框架

    Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...

  6. MySQL在Django框架下的基本操作(MySQL在Linux下配置)

    [原]本文根据实际操作主要介绍了Django框架下MySQL的一些常用操作,核心内容如下: ------------------------------------------------------ ...

  7. django框架介绍

    主要内容 1.        Django框架发展 2.        Django架构,MTV模式 3.        开发流程 4.        开发实例——Poll python下各种框架 一 ...

  8. Django学习(二) Django框架简单搭建

    为了快速学习Python进行Web的开发,所以我不准备从Python的基础学起,直接从Django框架入手,边学框架边学Python的基础知识. 下面就开始Django的快速开发之旅吧. 关于Djan ...

  9. Django - Django框架 简单介绍

    Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...

  10. Django框架全面讲解

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

随机推荐

  1. 一个抽取百度定位的教程(下载百度地图Demo+配置+抽取)

    效果展示 已经下载Demo的可以直接到第五步,已经配置好的并可以运行的可以直接到第七步. 1.在浏览器搜索 " 百度定位API ",点击下面这个链接 2.翻到最下面找到并点击 &q ...

  2. EMS恢复禁用邮箱

    使用PowerShell命令恢复禁用邮箱 键入以下命令: [PS] C:\Windows\system32>Get-MailboxDatabase | Get-MailboxStatistics ...

  3. vue获取验证码倒计时

    <template> <div> <el-button :disabled="disabled" @click="sendcode" ...

  4. Spring-aop注解开发(切点表达式的抽取)

    接上一篇aop注解快速开发 @Component @Aspect //标注当前aspect是切面类 public class MyAspect { @Before("Pointcut()&q ...

  5. nfs客户端的一次处理

    为什么要说这个呢,由于节点环境不一致,导致在重建pod时,我们暂且叫该pod为 cxpod,cxpod所在宿主机出现了问题现象如下:一.cxpod始终处于创建中 ContainerCreating [ ...

  6. MySQL 的发展历史和版本分支

    时间和里程碑 想查看之前的版本可以从这里找到mysql4,5,8等版本http://mirrors.sohu.com/mysql/下面简单回顾下相关的一些版本信息1996 年 MySQL 1.0 发布 ...

  7. oracle查看当前用户表结构、主键、索引

    1.查询表的所有列及其属性 select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = ...

  8. docker基础容器中bash: vi: command not found问题解决

    安装即可 1.apt-get update 2.apt-get install vim

  9. springboot打包时候忽略编译测试类

    方法1.可以在依赖中加入插件 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId ...

  10. @JsonFormat、@DateTimeFormat、@JsonSerialize注解的使用

    @JsonFormat 是jackson的注解,用于后台返回前台的时候将后台的date类型数据转为string类型格式化显示在前台,加在get方法或者date属性上面,因为 @JsonFormat 注 ...