一、框架最让人头疼的问题

利用框架来编写程序,会大大降低编写难度,但是如果不了解框架的调用关系及各个文件的作用,在遇到error时往往会很头疼。
以前曾经编写过Android程序,网络上对Android中各个部分的调用关系、生存期讲的很清楚,但是当我用django框架编写程序时,发现网上对这方面的东西讲的很模糊。这篇博客就讲一下我对django框架的一点个人理解。
django框架的大致结构:urls.py负责识别发送过来的request(请求),并把这些请求分派给views.py中相应的请求相应函数。而在views.py中函数的执行过程中,可能会调用到数据库的数据。这时候就会调用models.py。

二、关于models.py中的__str__

最开始接触django时,发现很多网络上的、书上的程序都会用到__str__函数,例如下面这段代码。

class Details(models.Model):"""关于用户的更多信息"""heart_rate = models.FloatField(default=0)date_added = models.DateTimeField(auto_now=True)user = models.ForeignKey(User, on_delete=models.CASCADE)def __str__(self):result = [self.heart_rate, self.date_added]return str(result)

当时找了很久,没有一个地方用一句话简单概括这个函数的作用的。那么这个返回值到底有什么用呢??其实,这个代码只是用于进行网页显示的。没什么大的用处。

如果我在__str__中返回一个字符串化的列表,那么就在django的管理员网站显示这样的信息。这就是__str__的作用。现在我把__str__改成下面这样,网站的显示也发生了改变。

    def __str__(self):# result = [self.heart_rate, self.date_added]result = self.heart_ratereturn str(result)

这块代码现在只显示心率信息,显示结果如下图:

三、models.py中定义的类的作用

在models.py中定义一个类,就意味着在项目的"db.sqlite3"数据库中加入了一张数据表。也就是说,在models.py中定义类,就代表了创建了新的数据存储结构

四、为什么要执着于设置默认主键id呢?

在django数据库中,所有的数据表都有默认的主键,就是“id”。最初,我一直想通过自己设置新的主键,来达到防止数据重复存储的目的,但是这里面遇到了很多奇奇怪怪的问题。所以,为什么不简单地就在存取数据的过程中加一些判断呢,通过一些简单的代码,就完全可以实现类似于主键的作用了。

五、关于views.py中的render()函数

想必有很多人看到在views.py中有类似下面的用法

return render(request, template.html, context)

最开始,我也想用这个render函数来响应来自手机APP的请求,但是会发现因为少了第二个参数而报错。那么这个函数是用来干什么的呢?
render(渲染) 看到英文翻译就可以明白,这个函数是用来帮助开发者显示网页的。在这个函数的参数中,template.html就是网页的模板,context是向这个模板传输的数据。总之,render()函数将服务器的后端和前端很简单地连接了起来。
那么小伙伴会问了,如果我就是和APP,和GPRS模块传输数据,根本不需要显示网页,那该怎么办呢?用HttpResponse()函数就可以了

return HttpResponse(response_info)

六、关于views.py中自定义函数参数的问题

常见的代码是像下面这样:

def login(request):# 函数体省略...

不过也有的人是这样:

def login(request, username, password):# 函数体省略...

曾经我就有这样的疑问,这多出来的两个参数,到底是什么时候给输入进去的呢?
不过,请大家仔细想一想django的框架。能够调用views.py的地方只有一个,那就是urls.py。所以,这两个多出来的参数一定是通过urls.py输入进去的。

path('login/', views.login, name='login'),

第一种的url是像上面这样,而第二种的url则是像下面这样。

re_path(r'login/(?P<username>\d+)&(?P<password>\d+)', views.login, name='login'),

这里的username和password就是输入到views.py的参数,可以看出,那么两个都是数字构成的数字串。

七、服务器可以干很多事情

服务器不只能用来响应请求、存储数据,它还可以自动执行很多程序,例如爬虫、数据可视化图形的生成、数据的分析等等,只需要在编写django服务器的时候在view.py中调用相关代码即可。

八、结语

由于这些感想都是网上没有的,可能会存在一些不准确的地方,往大家指正。本文用到的服务器代码连接【oldman.zip】,对刚刚接触django框架的朋友们会有一些帮助。

Django框架view.py,models.py,urls.py用法及调用关系的个人理解相关推荐

  1. 框架、文档、视图类之间的调用关系

    在多文档MFC应用程序执行过程中,创建了多于一个的文档类.视图类.子框架类对象和一个主框架类.应用类对象.这些对象之间是通过一定的方式联系在一起的,在应用程序设计中,时常需要通过这些对象之间的关系来实 ...

  2. django 框架模型之models常用的Field,这些Field的参数、及常见错误原因及处理方案。

    1. django 模型models 常用字段 1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列 如果要显式的自定义一个自增列,必须设置 ...

  3. Django知识点之urls.py路由设置

    路由系统 路由系统是把接收到的请求,根据网址进行匹配,指定处理请求的函数或类. 路由系统分类: 网站框架路由系统一般分为两类,FBV,CBV,Django两者都支持,但有的框架只支持一种. FBV(F ...

  4. djang urls.py 无名有名分组,反向解析,路由分发,名称空间,伪静态,虚拟环境,django版本...

    路由层 路由匹配:APPEND_SLASH = False , 取消自动补全 , settings.py 中添加字段即可 若url尾部为书写/ , django内部会自动补全 urls.py 中 对应 ...

  5. 路由系统(urls.py)

    路由系统(urls.py) 正则表达式匹配 urls.py from django.conf.urls import url from . import views urlpatterns = [ur ...

  6. Django3中的urls.py文件层级规划include的使用

    machine ├── machine │ ├── asgi.py │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.py ...

  7. ajax校验的优点,django框架中ajax的使用及避开CSRF 验证的方式详解

    本文实例讲述了django框架中ajax的使用及避开CSRF 验证的方式.分享给大家供大家参考,具体如下: ajax(Asynchronous Javascript And Xml) 异步javasc ...

  8. python django开发api_基于Django框架开发Restful api

    在上篇文章中,我们讲解了restful api的主要概念,让大家有初步的了解.这一篇中,我们将通过python的Django框架,来学习开发restful 架构的接口. 一. 开发环境 开发语言:Py ...

  9. Django框架学习——1—(虚拟环境搭建、MVC思想与Django的MVT区别、Django项目的创建、运行Django项目、项目结构介绍)

    1.虚拟环境搭建 创建新的Django框架的虚拟环境: 注意:如果没有pipenv指令,需要安装这个支持库,同时需要记住配置它的环境变量,否则虚拟环境会安装在默认文件夹下(一般是C:\Users\Ad ...

最新文章

  1. 轻量级高精度分割网络推荐
  2. Win XP必须禁止的服务
  3. mongoDB安装及使用
  4. pytorch 模型同一轮两次预测结果不一样_2020年的最新深度学习模型可解释性综述[附带代码]...
  5. bzoj3159 决战
  6. 【AWS】 AWS Free Usage Tier
  7. 使用Python处理声音文件(一):让歌曲重复两次
  8. 学校计算机总帐和明细帐的表格,5教学仪器设备总账和明细账填写模板.doc
  9. AI产品经理的技术了解层级
  10. linux u盘 修复工具,在Linux终端中修复U盘驱动器问题
  11. 回溯 + 剪枝 无重复元素的数组 candidates 和一个目标数 target 数字可以无限制重复被选取
  12. MATLAB生成一段音乐《小星星》
  13. 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码V3完结版本
  14. 微信小程序监听服务器发送消息,微信小程序实时聊天WebSocket
  15. 【面试系列】计算机网络常见面试题(一)
  16. L1-012 计算指数 (5 分) C语言
  17. Vscode 文件中 查找替换局部查找替换快捷键
  18. Genexus第5篇-WebPanel
  19. 土星计划-藤本科植物方案第二期
  20. 电子设备雷击/浪涌测试

热门文章

  1. python画圣诞老人图片_来得瑟一下!用Python做一个缩放自如的圣诞老人
  2. 当今智能小家电是谁的”天下“
  3. usb驱动程序初步编写
  4. 【周光权:利用计算机信息技术实施危害行为定性问题】
  5. Django之头像实时展示到input框、图片验证码、简单发邮件
  6. 论文笔记_2011_RAS_使用特征稳定性直方图FSH的移动机器人的建图和定位(上)
  7. 关于VS2015安装(亲测)
  8. EPS三维测图练习模型下载
  9. Untitled-1
  10. 常用英雄胜率怎么刷_王者荣耀英雄胜率怎么刷 王者荣耀如何提高自己的胜率呢...