返回顶部
首页 > 资讯 > 后端开发 > Python >Django的基本运用之Django垃圾分类详解
  • 1281
分享到

Django的基本运用之Django垃圾分类详解

2024-04-02 19:04:59 1281人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

title: 利用Django实现一个能与用户交互的初级框架 author: Sun-Wind date: September 1, 2021 DjanGo实现基本的框架

title: 利用Django实现一个能与用户交互的初级框架
author: Sun-Wind
date: September 1, 2021

DjanGo实现基本的框架

  • 此框架的功能是搭建服务器,使得服务器和客户端交互
  • 此框架可以接受客户端的请求,并返回根据请求所得到的结果

这里列举一个垃圾识别分类的例子

Django简介

Django 是一个由 python 编写的一个开放源代码的 WEB 应用框架。
使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务

mvc模型

Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。

MVT模型

Django 的 MTV 模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django 的 MTV 分别是指:
M 表示模型(Model):编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
T 表示模板 (Template):负责如何把页面(html)展示给用户。
V 表示视图(View):负责业务逻辑,并在适当时候调用 Model和 Template。
除了以上三层之外,还需要一个 URL 分发器,它的作用是将一个个 URL 的页面请求分发给不同的 View 处理,View 再调用相应的 Model 和 Template,MTV 的响应模式如下所示:
简易图:

创建垃圾分类项目

注意:博主使用的是windows系统,不同系统使用的指令不一样
<django-admin startproject rub>

使用以上指令创建项目
此时Django会形成一个项目框架,以下会一一解释说明

  • rub:项目的容器
  • manage.py:作为一个实用的命令行工具,能够让你和项目进行交互
  • init.py:此空文件告诉python是一个python包
  • asgi.py: ASGI兼容的web服务器入口,以便运行项目
  • settings.py:该项目的配置,比如数据库配置,访问配置,链接配置
  • urls.py:该项目的url(路由)声明
  • wsgi.py: WSGI兼容的web服务器入口,以便运行项目

运行我们的项目

<py manage.py runserver 0.0.0.0:8000>
通过以上命令来运行我们的项目
此命令需要在rub文件夹里命名
其中0.0.0.0能够让局域网的其他电脑访问到我们的网站,8000是端口号,也可以改成其他端口号,如果不写端口号默认是8000
此时命令行会生成对应的本地服务器的Http,访问后如下所示

如果无法访问,请查看是否是端口占用的问题,可以考虑更换一个端口号

悄悄说一句,8000端口占用多半是酷狗音乐什么的[]( ̄▽ ̄)*

创建app

Django规定,如果要使用模型层,必须要创建一个app(虽然我们这个项目里面不用,但还是教一下)
<django-admin.py startapp app>
然后Django就会自动生成app的框架
<py manage.py migrate> # 创建表结构
< py manage.py makemigrations app> # 让 Django 知道我们在我们的模型有一些变更
<py manage.py migrate app> # 创建表结构
运行以上指令可以完成数据库表单的创建
这里只是额外引入一下,实际上本项目实现比较简单,可以无需使用

配置路由

路由简单的来说就是根据用户请求的 URL 链接来判断对应的处理程序,并返回处理结果,也就是 URL 与 Django 的视图建立映射关系。
我们在rub的主路由中添加如下配置
<path('',include('app.urls')),>
利用include语句可以将app的路由映射进来,这样我们直接配置app的路由即可
include指的是路由的分发
Django 项目里多个app目录共用一个 urls 容易造成混淆,后期维护也不方便。
使用路由分发(include),让每个app目录都单独拥有自己的 urls。
在app的路由当中加入如下的配置
< path('',views.index,name = 'index'),>
<path('upload1',views.upload1,name = 'upload1'),>

path方法

Django path() 可以接收四个参数,分别是两个必选参数:route、view 和两个可选参数:kwargs、name。

  • route:字符串,表示URL规则,与之匹配的URL会执行第二个参数view
  • view:用来执行匹配的URL请求
  • kwargs:字典参数(通过此参数可以实现网页变量的解析操作,后续会有解释)
  • name:用来反向获取URL

视图层

在app的视图层中加入如下代码


def index(request):
    return render(request,'app/index.html')
def upload1(request):
    myfile = request.FILES.get('pic',None)
    if not myfile:
        return HttpResponse("没有上传的文件信息:")
    filename = str(time.time()) + "." + myfile.name.split('.').pop()#这里是对文件名进行预处理操作,时间函数可以随机化一个值,用str方法转换为字符串,然后用split拆分后缀名,可以实现任意图片形式的保存
    destination = open("./static/pic/" + filename,"wb+")#利用open函数和chunks流写入static文件夹
    for chunk in myfile.chunks():      # 分块写入文件  
        destination.write(chunk) 
    destination.close()
    label = predict_img(path="static/pic/" + filename)#此处是垃圾分类识别函数,因为竞赛相关,就不放出具体的识别代码了,读者可以参考相关资料自行补充此函数
    print(label)
    os.remove("./static/pic/"+filename)#这里删除文件,防止用户传入文件占用内存的问题
    context = {}
    context['result'] = label # 将result变量对应的键值设为lable,这样可以让html文件解析lable变量
    return render(request,'app/result.html',context)

接下来我们进行逐一解读
render(): 返回文本,第一个参数为 request,第二个参数为字符串(页面名称),第三个参数为字典(可选参数,向页面传递的参数:键为页面参数名,值为views参数名)。
简而言之就是根据路径返回我们需要的页面
注意这里要写成app/index而不是rub/index,虽然index的网页文件在rub的templates下创立
Request是一个对象,其属性简述如下

  • path 请求页面的全路径,不包括域名—例如, "/hello/"。m
  • ethod 请求中使用的HTTP方法的字符串表示。全大写表示。如

if request.method == 'GET':
    do_something()
elif request.method == 'POST':
    do_something_else()
  • FILES

包含所有上传文件的类字典对象。FILES中的每个Key都是<input type="file" name="" />标签中name属性的值. FILES中的每个value 同时也是一个标准Python字典对象,包含下面三个Keys:
filename: 上传文件名,用Python字符串表示
content-type: 上传文件的Content type
content: 上传文件的原始内容
注意:只有在请求方法是POST,并且请求页面中

模板

模板是一个文本,用于分离文档的表现形式和内容
在rub目录下建立templates文件夹,届时Django在通过URL寻找时会直接在此文件夹中找到对应的网页文件,在template文件夹下新建一个app文件夹
建立的index.html文件如下


<!DOCTYPE html>
<html lang="cn">
<head>
    <meta charset="UTF-8">
    <title>垃圾分类管理</title>
</head>
<body>
      <h2>垃圾分类管理</h2>
      {% include 'app/upload.html' %}
</body>
</html>

{% include %} 标签允许在模板中包含其它的模板的内容。
upload.html文件如下:


<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content =  "width = device-width,initial-scale=1.0">
    <title>       Document    </title>
</head>
<body>
    <h2>文件上传 </h2>
    <form action = "{% url  'upload1' %}"  method = "post"  enctype="multipart/form-data">
    {% csrf_token %}
    图片序号:<input type = "text" name = "title"/><br/><br/>
    请上传需要识别的图片:<input type = "file" name = "pic"/><br/><br>
    <input type = "submit" value = "上传"/>
</form>
</body>
</html>

这里只讲解一下csrf
csrf_token 用于form表单中,作用是跨站请求伪造保护。
如果不用{% csrf_token %}标签,在用 form 表单时,要再次跳转页面会报403权限错误。
用了{% csrf_token %}标签,在 form 表单提交数据时,才会成功。
至于其他的就是html语言的学习了,这里只简要讲解一下
在表单当中,input标签后面跟对应的type属性,可以上传相关的数据到后面的name键位当中
{% url 'upload1' %}是反方向解析URL,这里会直接将我们输入的信息提交到uoload1URL当中,然后会激活对应的视图层,也就是说我们提交的图片最终会传到upload1函数中.
我们在上文当中提到的配置path路径中的name就是这样的作用,这里图片上传的name是'pic'对应于我们在上文方法中引用的FILE.get中的参数
最后一个result界面


<html>
 <div>
 	<p>垃圾分类的结果是:{{ result }}</p>
 </div>
</html>

这里对应视图层当中upload1方法,大家不妨转到视图层当中再看一下upload1函数
最后其返回的是render方法,然后返回的是result界面
在这里{{result}}是在html'中定义的一个变量,我们通过render方法可以用lable文本来代替
最后实现的结果如图所示

我们只需要上传图片,然后提交利用我们自己写的垃圾分类识别代码即可得到对应的结果
这里我们提交上我们想要识别的图片


结果

到此这篇关于Django的基本运用之Django垃圾分类详解的文章就介绍到这了,更多相关Django垃圾分类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Django的基本运用之Django垃圾分类详解

本文链接: https://lsjlt.com/news/134324.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Django的基本运用之Django垃圾分类详解
    title: 利用Django实现一个能与用户交互的初级框架 author: Sun-Wind date: September 1, 2021 Django实现基本的框架 ...
    99+
    2024-04-02
  • Python之Django的基本使用
    一:Django虚拟环境搭建 先在本地创建一个用来存放项目的路径进入创建好的路径,创建虚拟环境 python -m venv djenv # 1.创建虚拟环境,djenv名称随意 进入虚拟环境 #so...
    99+
    2023-09-06
    python django 开发语言
  • 深度学习小工程练习之tensorflow垃圾分类详解
    介绍 这是一个基于深度学习的垃圾分类小工程,用深度残差网络构建 软件架构 使用深度残差网络resnet50作为基石,在后续添加需要的层以适应不同的分类任务 模型的训...
    99+
    2024-04-02
  • Django分页器的用法详解
    目录1、准备基础数据 2、一次性展示数据 3、引入分页器 附:drf分页器的使用1.1 PageNumberPagination 1.2 LimitOffsetPagination ...
    99+
    2024-04-02
  • Python垃圾邮件的逻辑回归分类示例详解
     加载垃圾邮件数据集spambase.csv(数据集基本信息:样本数: 4601,特征数量: 57, 类别: 1 为垃圾邮件,0 为非垃圾邮件),阅读并理解数据。 按以下要求处理数据...
    99+
    2024-04-02
  • Django零基础入门之常用过滤器详解
    引言: 前面讲过了Django中使用模板变量。使用很简单,那么有没有什么关于模板变量的骚操作呢? 答案是肯定有的,这就是本文要讲的——过滤器! 1.过滤器 (1)纯干货讲解: 作用:...
    99+
    2024-04-02
  • 使用GPT-3训练垃圾短信分类器示例详解
    目录引言训练数据注意事项训练过程开始训练迭代训练更多训练类型与商业应用内容分类器结构化信息提取上下文会话信息嵌入查询 引言 平时我们都会收到很多短信,由于微信等即时通讯工具的普及,短...
    99+
    2023-02-16
    GPT-3训练垃圾短信分类器 GPT-3训练分类器
  • Django drf分页器的使用详解
    前言 当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面 PageNumberPagination:基础分页器,性能略...
    99+
    2024-04-02
  • Java基础之详解基本数据类型的使用
    一、整型 主要扩展一下不同进制的整型 二进制、八进制、十进制、十六进制 * 二进制 : 0B(数字零+B) 0b(数字零+b) * 八进制 :0(数字零开头) * 十进制 :正常写...
    99+
    2024-04-02
  • django开发之settings.py中变量的全局引用详解
    本文主要介绍的是django中settings.py中变量的全局引用的相关资料,下面话不多说,来看看详细的介绍吧。 前言 在settings.py中添加自定义变量,可以通过setting.(点)变量名的方式...
    99+
    2022-06-04
    全局 变量 详解
  • Python基础之Numpy的基本用法详解
    一、数据生成 1.1 手写数组 a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) # 一维数组 b = np.array([[1, 2], [3, 4]]) #二维...
    99+
    2022-06-02
    Python Numpy用法 Python Numpy
  • Python的Django框架中forms表单类的使用方法详解
    Form表单的功能 自动生成HTML表单元素 检查表单数据的合法性 如果验证错误,重新显示表单(数据不会重置) 数据类型转换(字符类型的数据转换成相应的Python类型) Form相关的...
    99+
    2022-06-04
    表单 使用方法 详解
  • Java中的反射机制基本运用详解
    目录Java中的反射机制基本运用1、什么是反射(reflect)2、反射机制提供的功能3、反射->获取类对象4、反射->利用无参构造实例化对象5、反射->利用有参构...
    99+
    2024-04-02
  • Java基本数据类型之间的相互转换详解
    目录1.自动类型转换1.定义2.数据类型按精度大小排序3.使用细节2.强制类型转换1.定义2.使用细节3.基本数据类型与String类型的转换1.基本数据类型转String类型2.S...
    99+
    2024-04-02
  • JavaScript中引用类型之基本包装类型的示例分析
    这篇文章主要介绍JavaScript中引用类型之基本包装类型的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:为了操作基本类型值,ECDMAScript提供了3个特殊...
    99+
    2024-04-02
  • Python基础之类的定义和使用详解
    目录1、定义类2、创建类的实例3、“魔术”方法——_ init ()4、创建类的成员并访问4.1、创建实例方法并访问4.2、创建数据成...
    99+
    2024-04-02
  • Java中Arrays数组工具类的基本使用详解
    目录方法一览表快速定位详细操作asList()toString() 和 deepToString()sort() 和 parallelSort()binarySearch()comp...
    99+
    2024-04-02
  • Python基本结构之判断语句的用法详解
    目录逻辑控制数字逻辑条件条件控制if - 用法 if - else 用法 if 嵌套 练习题→猜数字小游戏说明 逻辑控制 逻辑控制其...
    99+
    2024-04-02
  • PHP数据库学习之详解PDO的基本用法
    PHP PDO是PHP数据库扩展中的一种重要组件,它为PHP与多种关系型数据库提供了统一的API,使用PDO可以让我们的程序更加安全、高效、易于维护。在本文中,我们将介绍PHP PDO的用法,包括如何连接数据库、执行SQL语句、事务处理等方...
    99+
    2023-05-14
    php pdo
  • 详解MybatisPlus3.4版本之后分页插件的使用
    目录一、MybatisPlusInterceptor 二、旧版分页插件配置方法(Mybatis Plus 3.4.0版本之前) 三、新的分页插件配置方法(Mybatis Plus 3...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作