热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

学习python,从入门到放弃(49)

学习python,从入门到放弃(49)web框架web框架:将前端、数据库整合到一起的基于互联网传输的python代码web框架也可以简单的理解为是软件开发架构里面的服务端搭建简易

学习python,从入门到放弃(49)


web框架

web框架:将前端、数据库整合到一起的基于互联网传输的python代码

web框架也可以简单的理解为是软件开发架构里面的'服务端'



  • 搭建简易版本服务端

    socket模块



  • 遵循HTTP协议

    四大特性、数据格式、响应状态码



  • 基于不同的后缀响应不同的内容

    如何获取用户输入的url后缀>>>:HTTP请求数据

    /favicon.ico直接忽略 不影响判断

    利用字符串切割和索引取值获取相应数据

    import socket
    server = socket.socket()
    server.bind(('127.0.0.1', 8082))
    server.listen(5)
    while True:
    sock, addr = server.accept()
    data = sock.recv(1024)
    # 将请求相关数据先转成字符串
    data_str = data.decode('utf8') # 'GET /login HTTP/1.1\r\nHost: 127.0.0.1:8081\r\n......'
    sock.send(b'HTTP1.1 200 OK\r\n\r\n')
    # 然后去字符串中截取出我们需要的内容(按照空格切割字符串 获取第二个元素即可)
    current_path = data_str.split(' ')[1]
    # 根据后缀的不同返回不同的内容
    if current_path == '/login':
    sock.send(b'hello login!!!')
    elif current_path == '/register':
    sock.send(b'hello register')
    else:
    sock.send(b'404 error')


缺陷:

1.服务端起始代码过于重复

2.针对HTTP请求数据没有完善的处理方式

3.并发量问题


基于wsgiref模块



  1. 利用模块搭建服务端



  2. 利用模块处理好的HTTP字典数据编写业务

    查找用户url后缀对象的键值对数据

    from wsgiref import simple_server
    def run(request, response):
    response('200 OK', []) # 固定编写 无需掌握
    current_path = request.get("PATH_INFO")
    if current_path == '/login':
    return [b'hello login html']
    elif current_path == '/register':
    return [b'hello register html']
    return [b'404 error']
    if __name__ == '__main__':
    server = simple_server.make_server('127.0.0.1', 8080, run)
    '''一致监听本机8080端口 一旦有请求访问 自动触发run方法的执行'''
    server.serve_forever()



优化措施

问题:

1.如果网站很多,就是添加elif

2.每个分支下的功能根据业务逻辑的不同可能会比较复杂

解决:

将匹配和功能封装成,元组和函数

所有的代码全部放在一个py文件过于冗余,不便于后期管理维护

根据功能的不同拆分成不同的py文件

urls.py 对应关系的存储

views.py 业务逻辑的编写

想新增功能,只需要在urls.py中添加对应关系,view.py中编写函数

业务函数的代码中,可能会频繁的使用到不同的html页面,为了避免文件类型的混乱,单独开设一个文件夹存储所有的html文件。

templates文件夹 存储项目所需的html文件

项目中的html文件,也有可能需要用到css、js、第三方框架文件。

html所学的css、js、第三方框架代码都是写完之后很少做改动的文件 所以可以统一存放在某个文件夹下

static文件夹 存储项目所需的'静态文件'

基于上述优化之后,整个项目结构清晰,管理维护都很方便。


动静态网页



  • 静态网页

    页面上的数据是直接写死的,万年不变。



  • 动态网页

    页面上的数据是通过代码动态获取的,实时可变。



页面上展示当前时间

def get_time(request):
# 1.获取当前时间
import time
c_time = time.strftime('%Y-%m-%d %X')
# 2.读取html文件
with open(r'templates/get_time.html','r',encoding='utf8') as f:
data = f.read()
new_data = data.replace('asdaksdjal',c_time)
return new_data

jinja2模块

在编写前后端不分离项目的时候,可以使用该模块提供的模板语法简单快速的在html页面是使用类似于后端的代码语法操作数据。

模板

temp_obj.render({'user':user_dict,'new_list':new_list})

{{ user }}

{{ user.name }}

{{ user['pwd'] }}

{{ user.get('hobby') }}


{% for i in new_list %}
元素:{{ i }}
{% endfor %}

也可以获取数据库中的数据展示到前端页面


框架请求流程



  • urls.py

    后缀与函数名对应关系

    ('/index',register)

    后缀专业名词称之为'路由'

    函数名专业名词称之为'视图函数'

    urls.py专业名词称之为'路由层'



  • views.py

    专门编写业务逻辑代码

    可以是函数 也可以是类

    函数专业名词称之为'视图函数'

    类专业名词称之为'视图类'

    views.py专业名词称之为'视图层'



  • templates文件夹

    专门存储html文件

    html文件专业名词称之为'模板文件'

    templates文件夹专业名词称之为'模板层'




python主流web框架



  • django

    大而全,自带的功能非常的多,但是有时候会略显笨重。



  • flask

    小而精,自带的功能非常的少,但是第三方模块非常的多。



flask的第三方模块加到一起甚至比django还多,并且也越来越像django。flask由于过多的依赖于第三方模块,有时候也会受制于第三方模块。



  • tornado

    异步非阻塞框架,速度极快,甚至可以用于充当游戏服务器。



框架的核心逻辑几乎是一致的,我们在学习的时候只需要先学会一种

之后就可以触类旁通,但是需要强调的是:千万不用同时学习,因为非常容易混淆。


django框架

django本身类似于是一个空壳子,真正的功能是由里面的各个应用决定。

命令操作django



  • 创建django项目

    django-admin startproject 项目名(mysite)



  • 启动django项目

    cd 项目名(mysite) python3 manage.py runserver IP:PORT



  • 创建app应用

    python3 manage.py startapp 应用名(app01)

    命令行无法自动创建模板文件夹,需要自己执行命令创建。



pycharm操作django



  • new project

    选择django 填写应用即可,pycharm默认会自动帮你创建模板文件夹 并提供创建一个app的功能



  • 创建更多的app

    tools

    run manage.py task 命令自动提示



  • 启动项目

    接点击绿色箭头

    还可以修改端口号 edit configurations



使用django写一个淘宝,我们应该先创建一个空的django项目然后根据功能的不同创建不同的应用

django项目

app01(user)

app02(order)

app03(goods)

app04(backend)


django主要文件介绍

项目文件名

​ 同名文件夹

​ settings.py 项目配置文件

​ urls.py 路由层

​ manage.py

​ django入口文件 很多命令都需要该文件支持

​ db.sqlite3

​ django启动之后才会生成的文件 其实就是django自带的小型数据库

​ templates文件夹

​ 模板层

​ app01应用文件夹

​ migrations文件夹 数据迁移记录

​ admin.py django自带的后台管理

​ apps.py 用于app的注册

​ models.py 专门用于操作数据库

​ views.py 视图层

创建应用之后 一定要去配置文件中注册才能生效

'app01.apps.App01Config' 完整语法

'app01' 简写语法



推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
author-avatar
互粉-结局_596
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有