Django框架(一)
Django下载与简介
Django框架(一)
手打web框架
# 1.web框架简介 将前端、数据库整合到一起的基于互联网传输的python代码就可以称之为框架。 web框架也可以简单的理解为是软件开发架构里面的'服务端' # 2.搭建简易版本服务端 1.使用scoket模块 2.遵循HTTP协议(四大特性、数据格式、响应状态码) 3.基于不同的后缀响应不同的内容,我们在基于HTTP协议请求数据的时候获取用户输入的URL后缀,/favicon.ico直接忽略,不影响判断,我们可以利用字符切割和索引取值来获取相应的后缀。 # 3.代码演示 import socket server = socket.socket() server.bind(('127.0.0.1',8888)) server.listen(5) while True: sock,addr = server.accept() data = sock.recv(1024) # 将请求相关数据先转成字符串 data_str = data.decode('utf8') sock.send(b'HTTP1.1 200 OK\r\n\r\n') # 然后按照空格切割字符串,获取第二个元素就是我们想要的内容 current_path = data_str.split(' ')[1] # 根据不同的后缀返回不同的内容 if current_path == '/login': sock.send(b'this is login') elif current_path == '/register': sock.send(b'this is register') else: sock.send(b'this is 404')
基于wsgiref模块
# 1.上述框架的缺陷 1.服务端起始代码过于重复 2.针对HTTP请求数据没有完善的处理方式 3.并发量问题 # 2.利用模块搭建服务端 1.服务端代码 from wsgiref import simple_server from urls import urls from views import error def run(request,response): """ :param request: 请求相关的数据 :param response: 响应相关的数据 :return: 返回给客户端的展示数据 """ response('200 OK',[]) # 固定编写 current_path = request.get('PATH_INFO') func_name = None for url_tuple in urls: if current_path == url_tuple[0]: # 先获取对应的函数名 func_name = url_tuple[1] # 一旦匹配,后续的对应的关系就无须在循环比对 break if func_name: res = func_name(request) else: res = error(request) # 将request也传给函数,便于后续数据的获取 return [res.encode('utf8')] if __name__ == '__main__': server = simple_server.make_server('127.0.0.1',8081,run) server.serve_forever() 2.路由层代码 from views import * urls = (('/login', login), ('/register', register), ('/big_zi', big_zi)) 3.功能函数代码 def login(request): return 'this is login' def register(request): return 'this is register' def big_zi(request): with open(r'dazi.html','r',encoding='utf8') as f: return f.read() def error(request): return 'this is 404' # 3.优化措施 因为把所有的代码全部放在一个py文件中显的过于冗余,不便于后期管理,所以我们根据不同的业务逻辑拆分成不同的py文件,路由层(urls.py)存储对应关系,功能函数层(views.py)存储业务逻辑,以后我们想要新增功能,只需要在路由层添加对应关系,功能函数层添加功能函数即可。 在业务函数代码中,会频繁的使用HTML页面,为了避免文件类型的混乱,单独开设一个文件夹存储所有的HTML文件,templates文件夹存储项目所需的HTML文件,项目中的HTML页面需要用到js,css,第三方框架等等,因为这些写完之后很少做改动,所以统一存放到一个文件夹下,static文件夹,存储项目所需的静态文件。
动静态网页
# 1.静态网页 页面上的数据是直接写死的,不会改变的 # 2.动态网页 页面上的数据是通过后端代码动态获取的,实时可变的 # 3.代码演示动态获取时间 1.后端代码 def get_time(request): # 1.获取当前时间 import time c_time = time.strftime('%Y-%m-%d %X') # 2.读取HTML文件 with open(r'templates/date_time.html','r',encoding='utf8') as f: date = f.read() # 3.用字符串替换来展示时间 new_date = date.replace('sadfsd',c_time) return new_date 2.前端代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>时间:</h2> <span>sadfsd</span> </body> </html>
jinja2模块
jinja2模块是第三方模块,在编写前后端不分离项目的时候,可以使用该模块提供的模板语法简单快速的在HTML页面使用类似于后端的代码语法操作数据 # 代码演示 1.后端代码 from jinja2 import Template def get_dict(request): user_dict = {'name': 'oscar','pwd': 123,'hobby': 'run'} new_list = [11,22,33,44,55] with open('templates/dict.html','r',encoding='utf8') as f: date = f.read() temp_obj = Template(date) res = temp_obj.render({'user':user_dict,'new_list': new_list}) # 给HTML页面传递一个变量名是user,值是user_dict对应值的数据 return res 2.前端代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>字典数据展示</h2> <p>{{user}}</p> <p>{{user.name}}</p> <p>{{user['pwd']}}</p> <p>{{user.get('hobby')}}</p> <p> {% for i in new_list %} <span>元素:{{i}}</span> {% endfor %} </p> </body> </html>
python主流web框架
# 1.django 大而全,自带功能非常多,但是有时候会略显笨重 # 2.flask 小而精,自带的功能非常的少,但是第三方模块非常多,flask的第三方模块加起来比Django还多,并且也越来越像Django,flask由于过多的依赖于第三方模块,有时候也会受制于第三方模块 # 3.tornado 异步非阻塞框架,速度极快,甚至可以用于充当游戏服务器
Django框架简介
# 1.版本问题 Django3.X:默认支持异步功能 Django2.X:默认不支持异步 Django1.X:默认不支持异步 Django1.11.X LTS在2018年发布,Django2.2X LTS在2020年发布 # 2.启动问题 1.计算机名称不能含有中文 2.不同版本的解释器可能会报错,找到报错信息的最后一行提示对应的代码,删除源文件逗号即可,解释器推荐使用python3.6,几乎不会报错,解释器版本过高使用Django1.11可能会报错,解释器版本过低使用Django2、3也可能会报错 3.项目中所有的文件名称最好都是英文 4.一个pycharm窗口尽量就是一个完整的项目,不要嵌套
Django基本使用
# 1.验证是否下载成功 cmd窗口直接输入命令django-admin有反应就是下载成功了 # 2.命令操作Django 1.创建Django项目 django-admin startproject 项目名(mysite) 2.启动Django项目 cd 项目名(mysite) python3 manage.py runserver IP:PORT 3.创建app应用 python3 manage.py startapp 应用名(app01) '''命令操作无法自动创建模板文件夹,需要自己执行命令创建''' # 3.pycharm操作Django 1.new project 选择Django填写应用即可 2.创建更多的app tools run manage.py task 命令自动提示 3.启动项目 直接点击绿色箭头 还可以修改端口号:edit configurations
Django主要文件介绍
django本身类似于是一个空壳子 真正的功能是由里面的各个应用决定 # 同名文件夹 settings.py:项目配置文件 urls.py:路由层 # 其他文件 manage.py:Django入口文件,很多命令都需要改文件 db.sqlite3:Django启动之后才会生成的文件,相当于Django自带的小型数据库 templates文件夹:模板层,存放HTML页面代码 # app应用文件夹 migrations文件夹:数据迁移记录 admin.py:django自带的后台管理 apps.py:用于app的注册 models.py:专门用于操作数据库 views.py:视图层 ''' 创建应用之后一定要去配置文件中注册才能生效: 'app01.apps.App01Config':完整语法 'app01':简写语法 '''
这里是IT小白陆禄绯,欢迎各位大佬的指点!!!
__EOF__
本文作者:陆禄绯
本文链接:https://www.cnblogs.com/pyqsy/p/16255723.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/pyqsy/p/16255723.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统