> 백엔드 개발 > 파이썬 튜토리얼 > Django 프레임워크의 백엔드 관리 시스템 기술(2부)

Django 프레임워크의 백엔드 관리 시스템 기술(2부)

王林
풀어 주다: 2023-06-17 19:09:08
원래의
966명이 탐색했습니다.

Django 프레임워크의 백엔드 관리 시스템 기술(2부)

이전 기사에서는 배경 페이지 레이아웃을 사용자 정의하는 방법, 필터를 사용자 정의하는 방법, 사용자 정의 작업, 등. 이 기사에서는 Django 프레임워크를 더 잘 사용하는 데 도움이 되는 보다 실용적인 팁을 계속해서 소개할 것입니다.

  1. 모델에서 ForeignKey의 기본값을 처리하는 방법

Django 모델에서 ForeignKey는 매우 실용적인 필드 유형입니다. 그러나 새 모델 인스턴스를 생성할 때 성공적으로 저장하려면 ForeignKey 유형 필드에 관련 모델의 인스턴스를 지정해야 합니다. 지정하지 않으면 기본적으로 NULL 값이 저장됩니다. 어떤 경우에는 ForeignKey 유형 필드를 기본 연관 인스턴스에 저장하고 싶을 수도 있습니다. 이 경우 Django의 get_or_create 메소드를 사용할 수 있습니다.

예를 들어 Product 모델이 있고 이에 대한 ProductCategory ForeignKey 필드를 정의합니다. 새 Product 인스턴스를 생성할 때 기본 Category 인스턴스를 자동으로 연결하려고 합니다.

class Product(models.Model):
    name = models.CharField(max_length=100)
    category = models.ForeignKey(ProductCategory, default=get_default_category)

   def get_default_category():
        """
        返回默认的ProductCategory实例或者创建一个新的实例
        """
        category, _ = ProductCategory.objects.get_or_create(name='Default Category')
        return category
로그인 후 복사

이렇게 하면 새 Product 인스턴스를 생성할 때 기본적으로 "Default Category"라는 ProductCategory 인스턴스가 자동으로 연결됩니다.

  1. 백그라운드 관리 시스템에서 모델이 하나의 인스턴스만 생성하도록 제한하는 방법은 무엇입니까?

어떤 경우에는 웹 사이트의 전역 설정과 같이 모델이 하나의 인스턴스만 생성하도록 할 수 있습니다. 이때 어떤 모델이든 Singleton 모델로 쉽게 변환할 수 있는 BaseSingletonModel을 제공하는 Django의 SingletonModel 라이브러리를 사용할 수 있습니다.

예를 들어 GlobalSettings 모델이 하나의 인스턴스만 생성할 수 있기를 바랍니다. 다음과 같이 정의할 수 있습니다.

from singleton_models.models import SingletonModel

class GlobalSettings(SingletonModel):
    site_name = models.CharField(max_length=100, default='')
    site_url = models.URLField(default='')
    # 其他全局设置字段
로그인 후 복사

정의한 후에는 백그라운드 관리 시스템에서 GlobalSettings 인스턴스를 하나만 생성하고 편집할 수 있습니다.

  1. 백엔드 관리 시스템에 사용자 정의 미들웨어를 추가하는 방법

Django 프레임워크에서 미들웨어는 요청과 응답을 처리하는 데 사용되는 인터셉터입니다. 요청이 뷰 함수에 도달하기 전, 뷰 함수가 요청을 처리한 후, 응답이 클라이언트에 전송되기 전에 요청이나 응답을 처리할 수 있습니다. 그 중, 백그라운드 관리 시스템에 커스텀 미들웨어를 추가하면 관리자의 작업을 쉽게 가로채서 처리할 수 있습니다.

예를 들어 관리자가 특정 수정 작업을 수행할 때 보조 확인 비밀번호를 입력해야 하는 경우 Django 프로젝트의 settings.py 파일에 다음 코드를 추가할 수 있습니다.

MIDDLEWARE = [
    # 默认的中间件
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    # 自定义中间件
    'myapp.middleware.ConfirmPasswordMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

CONFIRMED_ACTIONS = (
    'myapp.views.EditProductView',
    'myapp.views.DeleteProductView',
)

class ConfirmPasswordMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 根据请求的URL判断是哪个视图函数,如果是CONFIRMED_ACTIONS中的视图函数,需要做二次确认
        view_func = resolve(request.path_info).func
        if view_func and view_func.__module__ + "." + view_func.__name__ in CONFIRMED_ACTIONS:
            if not request.session.get('password_confirmed', False):
                # 没有输入二次确认密码,跳转到输入页面
                return redirect(reverse('confirm-password'))

        response = self.get_response(request)

        return response
로그인 후 복사

위 코드에서 우리는 ConfirmPasswordMiddleware를 정의하면 보기 기능에 도달하기 전에 요청을 가로채고 두 번째 확인 비밀번호가 필요한지 여부를 결정합니다. CONFIRMED_ACTIONS는 2차 확인이 필요한 보기 기능 목록으로 필요에 따라 추가하거나 삭제할 수 있습니다. 보기 기능에서는 request.session.get('password_confirmed', False)를 통해 현재 사용자가 2차 확인 비밀번호를 입력했는지 조회할 수 있습니다.

  1. 백엔드 관리 시스템의 모델에 직렬 변환기를 추가하는 방법

Django 프레임워크에서 Serializer는 모델을 사전 또는 JSON 형식으로 변환하는 데 사용되는 클래스입니다. 백엔드 관리 시스템에 직렬 변환기를 추가하면 모델을 JSON 형식으로 쉽게 변환하고 출력할 수 있습니다.

예를 들어 제품 모델이 있고 이를 JSON 형식으로 변환하여 백그라운드 관리 시스템에 출력하려고 합니다.

from django.contrib import admin
from django.core.serializers import serialize
from django.http import HttpResponse

class ProductAdmin(admin.ModelAdmin):
    # 列表视图显示的字段列表
    list_display = ('name', 'price', 'category')

    # 自定义action函数
    def export_as_json(self, request, queryset):
        response = HttpResponse(content_type="application/json")
        serializers.serialize("json", queryset, stream=response)
        return response
    export_as_json.short_description = "导出为JSON"

    # 自定义函数按钮
    change_list_template = 'admin/myapp/product/list.html'

    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            path('my_view/', self.my_view),
        ]
        return my_urls + urls

    def my_view(self, request):
        data = serialize('json', Product.objects.all())
        return JsonResponse(data, safe=False)

admin.site.register(Product, ProductAdmin)
로그인 후 복사

위 코드에서 ProductAdmin에 내보내기_as_json 함수를 추가했습니다. 현재 선택된 Model 인스턴스를 JSON 형식으로 변환하여 클라이언트에 출력합니다. 동시에 모든 모델 인스턴스를 직접 쿼리하고 이를 JSON 형식 출력으로 변환할 수 있는 my_view 함수를 ProductAdmin에 추가했습니다.

요약

Django 프레임워크의 백그라운드 관리 시스템은 웹 애플리케이션 개발을 위한 중요한 도구로, 모델 인스턴스, 일괄 수정 및 삭제를 쉽게 관리할 수 있는 다양한 기성 기능을 제공합니다. 이 기사에서는 모델에서 ForeignKey의 기본값을 처리하는 방법, 백엔드 관리 시스템에서 모델을 하나의 인스턴스만 생성하도록 제한하는 방법, 추가하는 방법 등 Django 프레임워크 백엔드 관리 시스템에 대한 몇 가지 실용적인 팁을 소개합니다. 백엔드 관리 시스템에 대한 사용자 정의 미들웨어를 정의하고 백엔드 관리 시스템 모델에 직렬 변환기를 추가하는 방법. 이러한 기술을 사용하면 Django 프레임워크의 백그라운드 관리 시스템을 더 잘 사용할 수 있습니다.

위 내용은 Django 프레임워크의 백엔드 관리 시스템 기술(2부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿