日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

ibd文件如何变为json_如何轻松了解 Python 必学的 django 框架?

發(fā)布時間:2023/12/15 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ibd文件如何变为json_如何轻松了解 Python 必学的 django 框架? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

django 框架配有一個功能強大的管理站點,里面已經(jīng)預(yù)定義了許多管理站點需要進(jìn)行的操作,但是有時可能默認(rèn)的操作不能滿足需求,如需要批量更新選中的對象,這需要編寫自定義 action 實現(xiàn)。本文基于 django 官方英文文檔梳理了一下自定義管理操作需要做的工作,方便快速了解自定義管理操作的實現(xiàn)過程。

作者 | 單雨,責(zé)編 | 黃浩然

出品 | CSDN(ID:CSDNnews)

Admin actions 簡介

admin actions 是一些在 admin 站點下拉列表中可以選擇執(zhí)行的簡單函數(shù),比如刪除一個對象操作。

編寫 Admin actions

下面舉例說明如何編寫Admin action。例如批量更新一個名為 Article 的模型:

from django.db import models

STATUS_CHOICES = [

('d', 'Draft'),

('p', 'Published'),

('w', 'Withdrawn'),

]

classArticle(models.Model):

title = models.CharField(max_length=100)

body = models.TextField

status = models.CharField(max_length=1,choices=STATUS_CHOICES)

def__str__(self):

returnself.title

下面來編寫 action 函數(shù),這個函數(shù)接受三個函數(shù):

? 當(dāng)前的 ModelAdmin

? 一個代表當(dāng)前 HTTP 請求的 HttpRequest 對象

? 一個包含用戶選定的對象的 QuerySet (數(shù)據(jù)庫檢索對象)。

def make_published(modeladmin, request,queryset):

queryset.update(status='p')

為了達(dá)到最佳性能,推薦使用 QuerySet 的 update 方法,

for obj in queryset:

do_something_with(obj)

默認(rèn)情況下,該操作將以“ Make published ”的形式出現(xiàn)在操作列表中,就是函數(shù)名,下劃線將由空格替換。為了讓這個方法更容易被人了解,我們可以給它添加一個 short_description 屬性。

def make_published(modeladmin, request,queryset):

queryset.update(status='p')

make_published.short_description ="Markselected stories as published"

添加 action 到 ModelAdmin

完整程序如下:

from django.contrib import admin

from myapp.models import Article

defmake_published(modeladmin, request, queryset):

queryset.update(status='p')

make_published.short_description ="Markselected stories as published"

classArticleAdmin(admin.ModelAdmin):

list_display = ['title', 'status']

ordering = ['title']

actions = [make_published]

admin.site.register(Article, ArticleAdmin)

效果如下:

處理 action 中的錯誤

如果在自定義的 actions 中可能發(fā)生錯誤,需要捕獲這些錯誤并調(diào)用 django.contrib.admin.ModelAdmin.message_user 來向用戶顯示錯誤消息。

將 action 定義為 ModelAdmin 的內(nèi)部方法

上述定義的 action 存在一個不足之處就是它和 Article 對象緊密耦合,這會導(dǎo)致大量的重復(fù)代碼出現(xiàn),即使這些 action 的功能都相同。將 action 定義為 ModelAdmin 的方法可以避免出現(xiàn)這個問題。

修改上述 ArticleAdmin:

class ArticleAdmin(admin.ModelAdmin):

...

actions = ['make_published']

def make_published(self, request, queryset):

queryset.update(status='p')

make_published.short_description ="Mark selected stories aspublished"

注意 make_published 變?yōu)?ArticleAdmin 的內(nèi)部方法,第一個參數(shù)變?yōu)榱?self。將 action 變?yōu)?ModelAdmin 的方法,使得它可以調(diào)用任何admin 提供的方法。例如向用戶發(fā)送消息:

class ArticleAdmin(admin.ModelAdmin):

...

def make_published(self, request, queryset):

rows_updated = queryset.update(status='p')

if rows_updated ==1:

message_bit ="1 story was"

else:

message_bit ="%s stories were"%rows_updated

self.message_user(request, "%s successfully marked as published."%message_bit)

這使得 action 執(zhí)行成功之后自動將 action 的行為和 admin 站點的行為相匹配。

效果如下:

提供中間頁的 action

在一些情況下,action 需要提供一個中間頁來提示用戶是否確認(rèn)執(zhí)行操作,比如刪除對象時提醒用戶是否確認(rèn)執(zhí)行操作:

要提供中間頁,只需要返回一個 HttpResponse 或者子類即可。例如一個導(dǎo)出選中對象 json 文件的操作:

from django.core import serializers

from django.http import HttpResponse

defexport_as_json(modeladmin, request, queryset):

response = HttpResponse(content_type="application/json")

serializers.serialize("json

總結(jié)

以上是生活随笔為你收集整理的ibd文件如何变为json_如何轻松了解 Python 必学的 django 框架?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。