Django 프레임워크의 백엔드 관리 시스템 기술(2부)
이전 기사에서는 배경 페이지 레이아웃을 사용자 정의하는 방법, 필터를 사용자 정의하는 방법, 사용자 정의 작업, 등. 이 기사에서는 Django 프레임워크를 더 잘 사용하는 데 도움이 되는 보다 실용적인 팁을 계속해서 소개할 것입니다.
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 인스턴스가 자동으로 연결됩니다.
어떤 경우에는 웹 사이트의 전역 설정과 같이 모델이 하나의 인스턴스만 생성하도록 할 수 있습니다. 이때 어떤 모델이든 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 인스턴스를 하나만 생성하고 편집할 수 있습니다.
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차 확인 비밀번호를 입력했는지 조회할 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!