百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

第5天|Django3.0项目实战,在views中操作数据

liebian365 2024-11-19 06:28 30 浏览 0 评论

在Django框架中,views.py承当MVC中C(即Controller)的职责,负责协调系统的工作。在这可实现业务逻辑和数据操作的功能。数据操作,说白了,就是对数据库进行增删改查。

Django支持数据库之间的无缝迁移,你搞定(Mysql、Sql Server、Oracel、Sqlite等的)其中一个,其他的也是一样的,相对程序员来说。为了方便,我直接用Sqlite进行讲解。

5.1 新增数据

打开base下的views.py文件,引入models,编写新增数据的方法。编写好之后,进入5.2的urls.py文件里进行配置,配置网址和views中的函数的绑定,以便提供给浏览器访问。

from base.models import Post
from django.http import HttpResponse


# 创建数据并返回id
def create(request):
    post = Post(name='产品经理')
    post.save()
    return HttpResponse('新增岗位信息,返回的id=' + str(post.id))

5.2 urls配置

为了将访问节点,提供给用户,你需要将其告知用户,而节点的配置是在urls.py进行的。为了按模块,在创建base应用时,新建过一个urls.py文件(如果没有,现在就补上)。打开它并输入代码。

from django.urls import path
from . import views

app_name = 'base'
urlpatterns = [
    path('create/', views.create, name='create'),
]

独立模块(base下)的urls.py,还需要在总的(sales目录下)的urls.py中进行注册,方可生效。

from django.contrib import admin
from django.urls import path
from django.urls import include

urlpatterns = [
    path('base/', include('base.urls')),
    path('admin/', admin.site.urls),
]

5.3 执行新增

在开发工具中,按运行图标或在命令行窗口运行python3 manage.py runserver命令。在浏览器中,输入http://127.0.0.1:8000/base/create回车之后,会在页面上返回添加数据的时间。

改岗位名称,按下保存,Django框架会对自动对代码进行重新编译,你不用重新启动项目,直接在浏览器地址敲回车。

用Sqlite工具,打开db.sqlite3文件,可查到刚刚添加的数据。

5.4 查询数据

在views.py文件中,新增index查询方法,同时返回删除和修改的链接。从HttpResponse的名字,你应该可以猜出,返回结果是html页面来的。记住,新增一个方法,就要到base下的urls.py文件中进行访问节点配置。

from base.models import Post
from django.http import HttpResponse


# 访问数据
def index(request):
    posts = Post.objects.all()
    post_list = []
    for post in posts:
        del_str = "<a href='delete/{0}/'>删除</a>\t|".format(post.id)
        update_str = "\t<a href='update/{0}/'>修改</a><br/>".format(post.id)
        post_list.append(str(post.id) + ' \t ' + post.name + '\t')
        post_list.append(del_str)
        post_list.append(update_str)
    return HttpResponse(post_list)


# 创建数据并返回id
def create(request):
    post = Post(name='产品经理')
    post.save()
    return HttpResponse('新增岗位信息,返回的id=' + str(post.id))

在base下的urls.py文件中,新增index节点的配置信息。

from django.urls import path
from . import views

app_name = 'base'
urlpatterns = [
    path('index/', views.index, name='index'),
    path('create/', views.create, name='create'),
]

在浏览器输入http://127.0.0.1:8000/base/index/,回车之后看到页面效果如下。

当你点击删除或修改链接时,系统会报错。从错误信息可知,找到对应的方法。

5.5 删除修改

新增删除和修改方法并用HttpResponseRedirect进行页面重新导向。html的超链接标签是<a></a>,用它可进行页面跳转。代码中的format()函数实现了占位符功能,而重定向用HttpResponseRedirect实现。

from django.http import HttpResponse, HttpResponseRedirect



# 删除数据
def delete(request, post_id):
    Post.objects.filter(id=post_id).delete()
    return HttpResponseRedirect('/base/')


# 修改数据
def update(request, post_id):
    post = Post.objects.get(id=post_id)
    post.name = '吹牛经理'
    post.save()
    return HttpResponseRedirect('/base/')

为了方便链接地址,我将base里urls.py的内容进行了调整。完整代码如下。

from django.urls import path
from . import views

app_name = 'base'
urlpatterns = [
    path('', views.index, name='index'),
    path('create/', views.create, name='create'),
    path('delete/<int:post_id>/', views.delete, name='delete'),
    path('update/<int:post_id>/', views.update, name='update'),
]

修改节点配置之后,用http://127.0.0.1:8000/base/即可放到index里数据。现在你点击修改或删除链接就不会报错了。


5.6 错误处理

如果你是一个喜欢玩代码的人又或者是懂点测试的人,那你可以将访问地址改成http://127.0.0.1:8000/base/update/100/,回车之后,看一下会出现什么结果,没错,会报错。

访问的id不存在时,肯定会报错的,这,没什么好大惊小怪的。好了,有异常产生,你进行错误捕捉处理,对update函数进行升级改造就可以了。再次运行,会有友好信息提醒,over。

# 修改数据
def update(request, post_id):
    try:
        post = Post.objects.get(id=post_id)
        post.name = '吹牛经理'
        post.save()
    except Post.DoesNotExist:
        return HttpResponse('你要修改的岗位信息不存在,请确认!')
    else:
        return HttpResponseRedirect('/base/')

再次访问不存在的岗位,就会返回友好的提示信息。修改解决了,删除方法一样存在相关问题。你还可以再玩一玩。


对数据库的增删改查功能是实现了,只是视图(html)的代码写死在逻辑控制(views.py)里了。没有达到分工,轻耦合的目的,而要实现这个,可以通过模板文件进行实现。关注我,下一节告诉你templates模板文件。

好了,有关Django3.0中views的内容,老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。我在分享Python,前端、Java和App方面的干货。关注我,没错的。

#Python##Django##程序员##Web##项目实战#

相关推荐

深度解密epoll 如何工作的?(epoll基本处理流程)

epoll...

大乐透第19082期:头奖开出7注1000万分落六地 奖池41亿元

2019年7月17日晚开奖的体彩超级大乐透第19082期开奖号码为:前区06、18、20、21、31,后区03、04。本期大乐透前区号码五区比为1:0:3:0:1,二区和四区号码没有给出。当期前区和值...

【开奖】4月27日周六:福彩、体彩(2021年4月27日体彩开奖结果)

4月27日开奖福彩3D第2019110期:61222选5第2019110期:0812202122排列3第19110期:303排列5第19110期:30305大乐透第19047期:0304...

“红狒狒”落户哈尔滨铁路局(哈尔滨铁路红肠)

这几天,“红人”“红狒狒”在牡丹江机务段可引起了不小的轰动,众粉丝争相与其拍照留念,在该段人气爆棚!“红狒狒”到底何许人也?“红狒狒”,中文名:和谐3D型电力机车;绰号:红狒狒、番茄;制造商:大连机...

2D、3D、2.5D,做游戏还是搞噱头?玩家都晕了

前言游戏类型就像某种潮流,一种流行罢,另一种接棒成为主流。前两年的新作大多以“开放世界”为标签,在追求纯沙盒的过程中打造出一些细致的分类,比如说“类GTA沙盒”。诚然,纯碎的沙盒游戏并不多见,业内只有...

《战神4》PC版宣传片发布 GTX 1070即可60帧畅玩

在今年10月的时候索尼PlayStation官方正式宣布圣莫尼卡2018年的《战神4》将于2022年1月14日推出PC版本,官方在今天公布了一段PC版宣传片,并且公开了游戏的配置需求。下面让我们一起来...

男星深情好丈夫形象崩塌,半夜搂美女坐大腿,举止亲密

近日,于晓光被拍到深夜在酒吧玩,结束后与一名女子一起上车离开。上车后,女子直接坐在了他腿上,他也顺势搂着美女,美女满脸笑容地坐在他腿上玩手机离开。可能有人会好奇,于晓光是谁呢?于晓光是韩国艺人秋瓷炫的...

d3d12dll丢失怎么修复?d3d12dll加载失败怎么解决?

  d3d12.dll丢失怎么修复?d3d12.dll加载失败怎么解决?很多朋友想要运行游戏的时候都会遇到这个问题,这种情况该怎么办呢?今天系统之家小编给朋友们讲讲具体的解决方法,操作其实还蛮简单的。...

许多玩家反馈《生化4RE》PC一直崩溃 无法进入游戏

今日(3月24日),卡普空《生化危机4:重制版》正式发售,然而有部分PC玩家遇到了游戏崩溃等问题。很多玩家在贴吧发帖称游戏遇到了严重的崩溃问题,且经常反复,报错代码普遍为FatalD3Derror...

微软正式推出适用于WSL Linux的D3D12 GPU视频加速技术

今天,微软正式向WindowsSubsystemforLinux(WSL)用户发布了Direct3D12GPU视频加速支持。在微软通过WSL允许在Linux下使用Open...

《怪物猎人:崛起》曙光系统报错“Fatal d3d error”的解决办法

《怪物猎人:崛起》曙光系统报错“Fatald3derror”的解决办法不少小伙伴反应《怪物猎人:崛起》DLC曙光预载以后打不开游戏,出现了Fatald3derror类似的错误代码,这类问题的解...

Mac+双屏,前端程序员的专业配置 - Loctek 乐歌 D3D 双屏电脑显示器支架

做FE也有一段日子了,电脑屏幕每天在设计稿、浏览器、IDE、即时通讯工具、Terminal、邮箱之间切换。虽然mac的工作区带来了很多灵活,但是依然略显不足。于是入手支架,把公司配的电脑和显示器发挥起...

RPC 的原理和简单使用(rpc详解)

RPC的概念RPC,RemoteProcedureCall,翻译成中文就是远程过程调用,是一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数。在调用的...

大厂开源的golang微服务rpc框架 — kitex

提前rpc估计所有的开发同学都知道,不知道的也无所谓,毕竟我也好几年没用了,今天带大家在复习一下。RPC(RemoteProcedureCall):远程过程调用,...

干货!一文掌握Protobuf所有语言所有用法,快收藏

说实话,Protobuf这个库,让人相见时难别亦难,东风无力百花残,每次等到要用它的时候,总感觉还没有完全掌握它的用法,而实际上等去百度或者谷歌的时候,教程都是多么的凌乱不堪。学会它,最直接关系到的,...

取消回复欢迎 发表评论: