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 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   陆禄绯  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示