热门标签 | 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' 简写语法



推荐阅读
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社区 版权所有