{"title":"Django 0.96에서 1.0으로 앱 포팅","version":"4.2","locale":"ko","docname":"releases/1.0-porting-guide","url":"/ko/4.2/releases/1.0-porting-guide/","canonical":"https://djangodocs.dev/ko/4.2/releases/1.0-porting-guide/","summary":"Django 1.0은 일부 영역에서 0.96과 호환되지 않습니다. 이 가이드는 0.96 프로젝트 및 앱을 1.0으로 포팅하는 것을 알려드립니다. 이 문서의 첫 번째 부분에는 1.0에서 실행하는 데 필요한 일반적인 변경 사항이 포함되어 있습니다. 첫 번째 부분을 진행한 후에도 코드가 여전히…","html":"<h1>Django 0.96에서 1.0으로 앱 포팅<a class=\"heading-anchor\" href=\"#porting-your-apps-from-django-0-96-to-1-0\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django 1.0은 일부 영역에서 0.96과 호환되지 않습니다.</p>\n<p>이 가이드는 0.96 프로젝트 및 앱을 1.0으로 포팅하는 것을 알려드립니다. 이 문서의 첫 번째 부분에는 1.0에서 실행하는 데 필요한 일반적인 변경 사항이 포함되어 있습니다. 첫 번째 부분을 진행한 후에도 코드가 여전히 깨지면, <a class=\"reference internal\" href=\"#less-common-changes\">덜 일반적인 변경 사항</a> 섹션에서 덜 일반적인 호환성 문제 목록을 확인하세요.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">더 보기</p>\n<p><a class=\"reference internal\" href=\"/ko/4.2/releases/1.0/\"><span class=\"doc\">1.0 릴리스 노트</span></a>. 이 문서는 1.0의 새로운 기능을 더 자세히 설명합니다. 포팅 가이드는 코드를 빠르게 업데이트하는 데 더 많은 관심이 있습니다.</p>\n</aside>\n<section id=\"common-changes\">\n<h2>일반적인 변경 사항<a class=\"heading-anchor\" href=\"#common-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>이 섹션에서는 대부분의 사용자가 수행해야 하는 0.96과 1.0 사이의 변경 사항에 대해 설명합니다.</p>\n<section id=\"use-unicode\">\n<h3>유니코드 사용<a class=\"heading-anchor\" href=\"#use-unicode\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>문자열 리터럴(<code class=\"docutils literal notranslate\"><span class=\"pre\">'foo'</span></code>)을 유니코드 리터럴(<code class=\"docutils literal notranslate\"><span class=\"pre\">u'foo'</span></code>)로 변경합니다. Django는 이제 전체적으로 유니코드 문자열을 사용합니다. 대부분의 경우, 원시 문자열은 계속 작동하지만 유니코드 리터럴을 사용하도록 업데이트하면 모호한 문제를 방지할 수 있습니다.</p>\n<p>자세한 내용은 :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>/ref/unicode`를 참조하십시오.</p>\n</section>\n<section id=\"models\">\n<h3>모델<a class=\"heading-anchor\" href=\"#models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>모델 파일에 대한 일반적인 변경 사항:</p>\n<section id=\"rename-maxlength-to-max-length\">\n<h4><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>maxlength``를 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>max_length``로 이름 바꾸기<a class=\"heading-anchor\" href=\"#rename-maxlength-to-max-length\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">maxlength</span></code> 인수의 이름을 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>max_length``로 바꾸십시오(양식 필드와 일치하도록 변경됨):</p>\n</section>\n<section id=\"replace-str-with-unicode\">\n<h4><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>__str__``을 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>__unicode__``로 교체<a class=\"heading-anchor\" href=\"#replace-str-with-unicode\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>모델의 <code class=\"docutils literal notranslate\"><span class=\"pre\">__str__</span></code> 함수를 <code class=\"docutils literal notranslate\"><span class=\"pre\">__unicode__</span></code> 메서드로 바꾸고, 해당 메서드에서 유니코드를 사용`_(``u’foo’`)하고 있는지 확인하세요.</p>\n</section>\n<section id=\"remove-prepopulated-from\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">prepopulated_from</span></code> 제거<a class=\"heading-anchor\" href=\"#remove-prepopulated-from\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>모델 필드에서 <code class=\"docutils literal notranslate\"><span class=\"pre\">prepopulated_from</span></code> 인수를 제거하십시오. 이는 더 이상 유효하지 않으며, <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.py``의</span> <span class=\"pre\">``ModelAdmin</span></code> 클래스로 이동되었습니다. 관리자 변경에 대한 자세한 내용은 아래의 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>관리자`_를 참조하십시오.</p>\n</section>\n<section id=\"remove-core\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">코어</span></code> 제거<a class=\"heading-anchor\" href=\"#remove-core\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>모델 필드에서 <code class=\"docutils literal notranslate\"><span class=\"pre\">core</span></code> 인수를 제거하십시오. 이는 동등한 기능(:ref:’인라인 편집 &lt;admin-inlines&gt;’의 일부)이 이제 관리자 인터페이스에서 다르게 처리되기 때문에 더 이상 필요하지 않습니다. 아래의 <a class=\"reference internal\" href=\"#the-admin\">관리자</a> 섹션에 도달할 때까지 인라인 편집에 대해 걱정할 필요가 없습니다. 지금은 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>core``에 대한 모든 참조를 제거합니다.</p>\n</section>\n<section id=\"replace-class-admin-with-admin-py\">\n<h4><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>class Admin:<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>을 <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>admin.py``로 바꾸십시오.<a class=\"heading-anchor\" href=\"#replace-class-admin-with-admin-py\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>모델에서 모든 내부 <code class=\"docutils literal notranslate\"><span class=\"pre\">class</span> <span class=\"pre\">Admin</span></code> 선언을 제거하십시오. 제거하지 않으면 문제가 되는 것은 아니지만, 아무 역할도 하지 않을 것입니다. 관리자에게 앱을 등록하려면 해당 선언을 <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.py</span></code> 파일로 이동해야 합니다. 자세한 내용은 아래의 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>관리자`_를 참조하십시오.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">더 보기</p>\n<p>djangosnippets__의 기여자는 <a href=\"#id4\"><span class=\"problematic\" id=\"id5\">`models.py를 스캔하고 해당 admin.py를 생성하는`__</span></a> 스크립트를 작성했습니다.</p>\n</aside>\n</section>\n<section id=\"example\">\n<h4>예제<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>다음은 필요한 모든 변경 사항이 포함된 <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code> 파일의 예입니다:</p>\n<p>오래된 (0.96) <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Author</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">maxlength</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">maxlength</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">slug</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">maxlength</span><span class=\"o\">=</span><span class=\"mi\">60</span><span class=\"p\">,</span> <span class=\"n\">prepopulate_from</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Admin</span><span class=\"p\">:</span>\n        <span class=\"n\">list_display</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>신규 (1.0) <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Author</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">slug</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">__unicode__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>신규 (1.0) <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.py</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">prepopulated_fields</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;slug&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">)}</span>\n\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">AuthorAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"the-admin\">\n<h3>관리자<a class=\"heading-anchor\" href=\"#the-admin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>1.0의 가장 큰 변화 중 하나는 새로운 관리자입니다. Django 관리 인터페이스(<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code>)가 완전히 리팩토링되었습니다. 관리자 정의는 이제 모델 정의에서 완전히 분리되었으며, 프레임워크는 Django의 새로운 양식 처리 라이브러리를 사용하도록 재작성되었으며, 확장성과 사용자 지정을 염두에 두고 재설계되었습니다.</p>\n<p>실질적으로, 이는 모든 <code class=\"docutils literal notranslate\"><span class=\"pre\">class</span> <span class=\"pre\">Admin</span></code> 선언을 다시 작성해야 함을 의미합니다. 위의 models`_에서 ``admin.py` 파일에서 <code class=\"docutils literal notranslate\"><span class=\"pre\">class</span> <span class=\"pre\">Admin``을</span> <span class=\"pre\">``admin.site.register()</span></code> 호출로 대체하는 방법을 이미 보았습니다. 다음은 <code class=\"docutils literal notranslate\"><span class=\"pre\">Admin</span></code> 선언을 새 구문으로 다시 작성하는 방법에 대한 자세한 내용입니다.</p>\n<section id=\"use-new-inline-syntax\">\n<h4>새로운 인라인 구문 사용<a class=\"heading-anchor\" href=\"#use-new-inline-syntax\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>새로운 <code class=\"docutils literal notranslate\"><span class=\"pre\">edit_inline</span></code> 옵션이 모두 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>admin.py``로 이동되었습니다. 예를 들면 다음과 같습니다:</p>\n<p>이전 (0.96):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Parent</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Child</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">parent</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Parent</span><span class=\"p\">,</span> <span class=\"n\">edit_inline</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">STACKED</span><span class=\"p\">,</span> <span class=\"n\">num_in_admin</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>신규 (1.0):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ChildInline</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">StackedInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Child</span>\n    <span class=\"n\">extra</span> <span class=\"o\">=</span> <span class=\"mi\">3</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ParentAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Parent</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">ChildInline</span><span class=\"p\">]</span>\n\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Parent</span><span class=\"p\">,</span> <span class=\"n\">ParentAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>자세한 내용은 :ref:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>admin-inlines`을 참조하십시오.</p>\n</section>\n<section id=\"simplify-fields-or-use-fieldsets\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code> 단순화 또는 <code class=\"docutils literal notranslate\"><span class=\"pre\">fieldsets</span></code> 사용<a class=\"heading-anchor\" href=\"#simplify-fields-or-use-fieldsets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>이전 <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code> 구문은 매우 혼란스러웠기 때문에 단순화되었습니다. 이전 구문은 여전히 작동하지만, 대신 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>fieldsets``를 사용해야 합니다.</p>\n<p>이전 (0.96):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ModelOne</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Admin</span><span class=\"p\">:</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">((</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">)}),)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ModelTwo</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Admin</span><span class=\"p\">:</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"p\">(</span><span class=\"s2\">&quot;group1&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collapse&quot;</span><span class=\"p\">}),</span>\n            <span class=\"p\">(</span><span class=\"s2\">&quot;group2&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;spam&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;eggs&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collapse wide&quot;</span><span class=\"p\">}),</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>신규 (1.0):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ModelOneAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ModelTwoAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">fieldsets</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;group1&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collapse&quot;</span><span class=\"p\">}),</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;group2&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;spam&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;eggs&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collapse wide&quot;</span><span class=\"p\">}),</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">더 보기</p>\n<ul class=\"simple\">\n<li><p>변경 사항 및 그 이유에 대한 자세한 정보는 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>NewformsAdminBranch 위키 페이지`__에서 찾을 수 있습니다.</p></li>\n<li><p>새로운 관리자에게는 수많은 새로운 기능이 제공됩니다. :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>admin 문서 &lt;/ref/contrib/admin/index&gt;`에서 이에 대해 읽을 수 있습니다.</p></li>\n</ul>\n</aside>\n</section>\n</section>\n<section id=\"urls\">\n<h3>URL들<a class=\"heading-anchor\" href=\"#urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"update-your-root-urls-py\">\n<h4>루트 <code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code> 업데이트<a class=\"heading-anchor\" href=\"#update-your-root-urls-py\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>관리 사이트를 사용하는 경우, 루트 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>urls.py``를 업데이트해야 합니다.</p>\n<p>이전(0.96) <code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls.defaults</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"o\">*</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"n\">patterns</span><span class=\"p\">(</span>\n    <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^admin/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;django.contrib.admin.urls&quot;</span><span class=\"p\">)),</span>\n    <span class=\"c1\"># ... the rest of your URLs here ...</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>신규 (1.0) <code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls.defaults</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"o\">*</span>\n\n<span class=\"c1\"># The next two lines enable the admin and load each admin.py file:</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">autodiscover</span><span class=\"p\">()</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"n\">patterns</span><span class=\"p\">(</span>\n    <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^admin/(.*)&quot;</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">root</span><span class=\"p\">),</span>\n    <span class=\"c1\"># ... the rest of your URLs here ...</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"views\">\n<h3>뷰<a class=\"heading-anchor\" href=\"#views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"use-django-forms-instead-of-newforms\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">newforms</span></code> 대신 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.forms</span></code> 사용<a class=\"heading-anchor\" href=\"#use-django-forms-instead-of-newforms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.newforms``를</span> <span class=\"pre\">``django.forms``로</span> <span class=\"pre\">바꾸십시오</span> <span class=\"pre\">--</span> <span class=\"pre\">Django</span> <span class=\"pre\">1.0은</span> <span class=\"pre\">``newforms</span></code> 모듈(0.96에 도입됨)을 일반 이전 <code class=\"docutils literal notranslate\"><span class=\"pre\">forms``로</span> <span class=\"pre\">이름을</span> <span class=\"pre\">바꿨습니다.</span> <span class=\"pre\">``oldforms</span></code> 모듈도 제거되었습니다.</p>\n<p>이미 <code class=\"docutils literal notranslate\"><span class=\"pre\">newforms</span></code> 라이브러리를 사용 중이고, 권장하는 <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> 문 구문을 사용했다면, import 문을 변경하기만 하면 됩니다.</p>\n<p>이전:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">newforms</span> <span class=\"k\">as</span> <span class=\"n\">forms</span>\n</code></pre></div>\n<p>신규:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n</code></pre></div>\n<p>이전 양식 시스템(이전의 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.forms</span></code> 및 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.oldforms</span></code>)을 사용하는 경우, 양식을 다시 작성해야 합니다. :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>양식 문서 &lt;/topics/forms/index&gt;`을 통해 시작하는 것이 좋습니다.</p>\n</section>\n<section id=\"handle-uploaded-files-using-the-new-api\">\n<h4>새로운 API를 사용하여 업로드된 파일 처리<a class=\"heading-anchor\" href=\"#handle-uploaded-files-using-the-new-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>업로드된 파일(즉, <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code> 항목)의 사용을 새로운 :class:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~django.core.files.uploadedfile.UploadedFile`로 간단한 사전으로 대체하십시오. 이전 사전 구문은 더 이상 작동하지 않습니다.</p>\n<p>따라서, 다음과 같은 뷰에서:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span><span class=\"p\">[</span><span class=\"s2\">&quot;file_field_name&quot;</span><span class=\"p\">]</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>…다음과 같이 변경해야 합니다:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>이전 (0.96)</p></th>\n<th class=\"head\"><p>신규 (1.0)</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">f['content']</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">f.read()</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">f['filename']</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">f.name</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">f['content-type']</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">f.content_type</span></code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n<section id=\"work-with-file-fields-using-the-new-api\">\n<h4>새 API를 사용하여 파일 필드 작업<a class=\"heading-anchor\" href=\"#work-with-file-fields-using-the-new-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>:class:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>django.db.models.FileField`의 내부 구현이 변경되었습니다. 모델 필드의 특수 속성(URL, 파일 이름, 이미지 크기 등)에 액세스하는 방식이 변경되었습니다. 모델의 :class:<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>~django.db.models.FileField`가 <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>myfile``이라고 가정하고 다음과 같이 변경해야 합니다:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>이전 (0.96)</p></th>\n<th class=\"head\"><p>신규 (1.0)</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.get_content_filename()</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.content.path</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.get_content_url()</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.content.url</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.get_content_size()</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.content.size</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.save_content_file()</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.content.save()</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.get_content_width()</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.content.width</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.get_content_height()</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myfile.content.height</span></code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">width</span></code> 및 <code class=\"docutils literal notranslate\"><span class=\"pre\">height</span></code> 속성은 <a class=\"reference internal\" href=\"/ko/4.2/ref/models/fields/#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> 필드에만 의미가 있습니다. 자세한 내용은 <a class=\"reference internal\" href=\"/ko/4.2/ref/models/fields/\"><span class=\"doc\">model API</span></a> 문서에서 찾을 수 있습니다.</p>\n</section>\n<section id=\"use-paginator-instead-of-objectpaginator\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">ObjectPaginator</span></code> 대신 <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> 사용<a class=\"heading-anchor\" href=\"#use-paginator-instead-of-objectpaginator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>0.96의 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>ObjectPaginator``가 제거되고, 개선된 버전인 :class:<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>django.core.paginator.Paginator`로 대체되었습니다.</p>\n</section>\n</section>\n<section id=\"templates\">\n<h3>템플릿<a class=\"heading-anchor\" href=\"#templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"learn-to-love-autoescaping\">\n<h4>자동 이스케이핑을 사랑하는 법 배우기<a class=\"heading-anchor\" href=\"#learn-to-love-autoescaping\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>기본적으로, 템플릿 시스템은 이제 모든 변수의 출력을 자동으로 HTML 이스케이프 처리합니다. 자세한 내용은 :ref:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>automatic-html-escaping`을 참조하십시오.</p>\n<p>개별 변수에 대한 자동 이스케이프를 비활성화하려면 <a class=\"reference internal\" href=\"/ko/4.2/ref/templates/builtins/#std-templatefilter-safe\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">safe</span></code></a> 필터를 사용하세요:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code>This will be escaped: <span class=\"cp\">{{</span> <span class=\"nv\">data</span> <span class=\"cp\">}}</span>\nThis will not be escaped: <span class=\"cp\">{{</span> <span class=\"nv\">data</span><span class=\"o\">|</span><span class=\"nf\">safe</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>전체 템플릿에 대해 자동 이스케이프를 비활성화하려면, 템플릿(또는 템플릿의 특정 섹션)을 <a class=\"reference internal\" href=\"/ko/4.2/ref/templates/builtins/#std-templatetag-autoescape\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">autoescape</span></code></a> 태그로 래핑합니다:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">autoescape</span> <span class=\"nv\">off</span> <span class=\"cp\">%}</span>\n   ... unescaped template content here ...\n<span class=\"cp\">{%</span> <span class=\"k\">endautoescape</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"less-common-changes\">\n<h2>일반적이지 않은 변경 사항<a class=\"heading-anchor\" href=\"#less-common-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>다음 변경 사항은 더 작고 지역화된 변경 사항입니다. 고급 사용자에게만 영향을 주지만, 목록을 읽고 이러한 사항에 대한 코드를 확인하는 것이 좋습니다.</p>\n<section id=\"signals\">\n<h3>시그널<a class=\"heading-anchor\" href=\"#signals\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<ul class=\"simple\">\n<li><p>등록된 시그널 처리기에 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a><a href=\"#id3\"><span class=\"problematic\" id=\"id4\">**</span></a>kwargs``를 추가하십시오.</p></li>\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>django.dispatch.dispatcher``의 모듈 메서드 대신 <a class=\"reference internal\" href=\"/ko/4.2/topics/signals/#django.dispatch.Signal\" title=\"django.dispatch.Signal\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Signal</span></code></a> 객체의 메서드를 통해 신호를 연결, 연결 해제 및 전송합니다.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Anonymous</span></code> 및 <code class=\"docutils literal notranslate\"><span class=\"pre\">Any</span></code> 발신자 옵션 사용을 제거하십시오. 그들은 더 이상 존재하지 않습니다. <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>sender=None``을 사용하여 모든 보낸 사람이 보낸 신호를 계속 받을 수 있습니다.</p></li>\n<li><p>익명 객체 대신 <a class=\"reference internal\" href=\"/ko/4.2/topics/signals/#django.dispatch.Signal\" title=\"django.dispatch.Signal\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.dispatch.Signal</span></code></a> 인스턴스로 선언한 사용자 지정 시그널을 만듭니다.</p></li>\n</ul>\n<p>다음은 수행해야 하는 코드 변경에 대한 간략한 요약입니다:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>이전 (0.96)</p></th>\n<th class=\"head\"><p>신규 (1.0)</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">def</span> <span class=\"pre\">callback(sender)</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">def</span> <span class=\"pre\">callback(sender,</span> <span class=\"pre\">**kwargs)</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sig</span> <span class=\"pre\">=</span> <span class=\"pre\">object()</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sig</span> <span class=\"pre\">=</span> <span class=\"pre\">django.dispatch.Signal()</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dispatcher.connect(callback,</span> <span class=\"pre\">sig)</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sig.connect(callback)</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dispatcher.send(sig,</span> <span class=\"pre\">sender)</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sig.send(sender)</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dispatcher.connect(callback,</span> <span class=\"pre\">sig,</span> <span class=\"pre\">sender=Any)</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sig.connect(callback,</span> <span class=\"pre\">sender=None)</span></code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n<section id=\"comments\">\n<h3>코멘트<a class=\"heading-anchor\" href=\"#comments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django 0.96의 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.comments</span></code> 앱을 사용하고 있었다면, 1.0에 도입된 새로운 코멘트 앱으로 업그레이드해야 합니다. 자세한 내용은 업그레이드 가이드를 참조하세요.</p>\n</section>\n<section id=\"template-tags\">\n<h3>템플릿 태그<a class=\"heading-anchor\" href=\"#template-tags\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"spaceless-tag\">\n<h4><a class=\"reference internal\" href=\"/ko/4.2/ref/templates/builtins/#std-templatetag-spaceless\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">spaceless</span></code></a> 태그<a class=\"heading-anchor\" href=\"#spaceless-tag\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">spaceless</span></code> 템플릿 태그는 이제 단일 공백을 유지하는 대신, HTML 태그 사이의 <em>모든</em> 공백을 제거합니다.</p>\n</section>\n</section>\n<section id=\"local-flavors\">\n<h3>지역 풍미<a class=\"heading-anchor\" href=\"#local-flavors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"u-s-local-flavor\">\n<h4>U.S. 지역 풍미<a class=\"heading-anchor\" href=\"#u-s-local-flavor\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>django.contrib.localflavor.usa``는 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>django.contrib.localflavor.us``로 이름이 변경되었습니다. 이 변경은 다른 지역 풍미의 명명 체계와 일치하도록 만들어졌습니다. 코드를 마이그레이션하려면, import를 변경하기만 하면 됩니다.</p>\n</section>\n</section>\n<section id=\"sessions\">\n<h3>세션<a class=\"heading-anchor\" href=\"#sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"getting-a-new-session-key\">\n<h4>새 세션 키 얻기<a class=\"heading-anchor\" href=\"#getting-a-new-session-key\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>SessionBase.get_new_session_key()``는 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>_get_new_session_key()``로 이름이 변경되었습니다. <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>get_new_session_object()``는 더 이상 존재하지 않습니다.</p>\n</section>\n</section>\n<section id=\"fixtures\">\n<h3>픽스처<a class=\"heading-anchor\" href=\"#fixtures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"loading-a-row-no-longer-calls-save\">\n<h4>행을 로드할 때 더 이상 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>save()``를 호출하지 않습니다.<a class=\"heading-anchor\" href=\"#loading-a-row-no-longer-calls-save\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>이전에는 행을 로드하면 모델의 <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> 메서드가 자동으로 실행되었습니다. 이제는 실행되지 않으므로, <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>save()``에 의해 자동으로 채워진 모든 필드(예: 타임스탬프)는 이제 모든 픽스처에 명시적인 값이 필요합니다.</p>\n</section>\n</section>\n<section id=\"settings\">\n<h3>설정<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"better-exceptions\">\n<h4>더 나은 예외<a class=\"heading-anchor\" href=\"#better-exceptions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>이전 <code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">EnvironmentError`는</span> <span class=\"pre\">:exc:`ImportError</span></code> (Django가 설정 모듈을 찾는 데 실패할 때)와, <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#RuntimeError\" title=\"(Python v3.14에서)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">RuntimeError</span></code></a> (이미 사용한 후에 설정을 재구성하려고 할 때)로 분할되었습니다.</p>\n</section>\n<section id=\"login-url-has-moved\">\n<h4>:setting:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>LOGIN_URL`이 이동됨<a class=\"heading-anchor\" href=\"#login-url-has-moved\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><a class=\"reference internal\" href=\"/ko/4.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGIN_URL</span></code></a> 상수가 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth``에서</span> <span class=\"pre\">``settings</span></code> 모듈로 이동했습니다. <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>from django.contrib.auth import LOGIN_URL``을 사용하는 대신 :setting:<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>settings.LOGIN_URL &lt;LOGIN_URL&gt;`을 참조하십시오.</p>\n</section>\n<section id=\"append-slash-behavior-has-been-updated\">\n<h4><a class=\"reference internal\" href=\"/ko/4.2/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a> 동작이 업데이트되었습니다.<a class=\"heading-anchor\" href=\"#append-slash-behavior-has-been-updated\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>0.96에서 URL이 슬래시로 끝나지 않거나, 경로의 마지막 구성 요소에 마침표가 있고 :setting:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>APPEND_SLASH`가 True인 경우 Django는 동일한 URL로 리디렉션되지만 끝에 슬래시가 추가됩니다. 이제 Django는 후행 슬래시가 없는 패턴이 URL 패턴의 무언가와 일치하는지 확인합니다. 만약 일치한다면 의도적으로 해당 패턴을 포착하려 했다고 가정하고 리디렉션이 발생하지 않습니다.</p>\n<p>대부분의 경우, 아무런 변경이 필요하지 않습니다. 그러나 어떤 사람들은 다음과 같은 URL 패턴을 가지고 있습니다:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"sa\">r</span><span class=\"s2\">&quot;/some_prefix/(.*)$&quot;</span>\n</code></pre></div>\n<p>이전에는 이러한 패턴이 후행 슬래시를 갖도록 리디렉션되었습니다. 이러한 URL에 항상 슬래시를 사용하고 싶다면, 패턴을 다음과 같이 다시 작성하세요:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"sa\">r</span><span class=\"s2\">&quot;/some_prefix/(.*/)$&quot;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"smaller-model-changes\">\n<h3>더 작은 모델 변경<a class=\"heading-anchor\" href=\"#smaller-model-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"different-exception-from-get\">\n<h4><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>get()``과 다른 예외<a class=\"heading-anchor\" href=\"#different-exception-from-get\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>매니저는 이제 <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#AssertionError\" title=\"(Python v3.14에서)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code></a> 대신 <a class=\"reference internal\" href=\"/ko/4.2/ref/exceptions/#django.core.exceptions.MultipleObjectsReturned\" title=\"django.core.exceptions.MultipleObjectsReturned\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">MultipleObjectsReturned</span></code></a> 예외를  리턴합니다.</p>\n<p>이전 (0.96):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"k\">except</span> <span class=\"ne\">AssertionError</span><span class=\"p\">:</span>\n    <span class=\"n\">handle_the_error</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>신규 (1.0):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"k\">except</span> <span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">MultipleObjectsReturned</span><span class=\"p\">:</span>\n    <span class=\"n\">handle_the_error</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"lazydate-has-been-fired\">\n<h4><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>LazyDate``가 제거됨<a class=\"heading-anchor\" href=\"#lazydate-has-been-fired\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">LazyDate</span></code> 헬퍼 클래스는 더 이상 존재하지 않습니다.</p>\n<p>기본 필드 값과 쿼리 인수는 모두 콜러블 객체가 될 수 있으므로, <code class=\"docutils literal notranslate\"><span class=\"pre\">LazyDate</span></code> 인스턴스를 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>datetime.datetime.now``에 대한 레퍼런스로 대체할 수 있습니다:</p>\n<p>이전 (0.96):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">maxlength</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">published</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">LazyDate</span><span class=\"p\">())</span>\n</code></pre></div>\n<p>신규 (1.0):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">datetime</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">published</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"decimalfield-is-new-and-floatfield-is-now-a-proper-float\">\n<h4><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>DecimalField``는 새로운 기능이며, <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>FloatField``이 이제 적절한 float입니다.<a class=\"heading-anchor\" href=\"#decimalfield-is-new-and-floatfield-is-now-a-proper-float\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>이전 (0.96):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">field_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FloatField</span><span class=\"p\">(</span><span class=\"n\">max_digits</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">decimal_places</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>신규 (1.0):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">field_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DecimalField</span><span class=\"p\">(</span><span class=\"n\">max_digits</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">decimal_places</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>이 변경을 잊어버리면, <code class=\"docutils literal notranslate\"><span class=\"pre\">FloatField``가</span> <span class=\"pre\">``__init__``에서</span> <span class=\"pre\">``max_digits</span></code> 속성을 사용하지 않는다는 오류가 표시됩니다. 왜냐하면 새로운 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>FloatField``는 정밀도 관련 인수를 사용하지 않기 때문입니다.</p>\n<p>MySQL 또는 PostgreSQL을 사용하는 경우, 아무런 추가 변경이 필요하지 않습니다. <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>DecimalField``에 대한 데이터베이스 열 유형은 이전 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>FloatField``와 동일합니다.</p>\n<p>SQLite를 사용하는 경우, 데이터베이스에서 적절한 열을 부동 소수점이 아닌 십진수 유형으로 다루도록 강제해야 합니다. 이렇게 하려면 데이터를 다시 로드해야 합니다. 코드에서 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>DecimalField``를 사용하도록 변경하고, Django 코드를 업데이트한 후에 이 작업을 수행하십시오.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">경고</p>\n<p><strong>먼저 데이터베이스를 백업하세요!</strong></p>\n<p>SQLite의 경우, 이는 데이터베이스를 저장하는 단일 파일의 복사본을 만드는 것을 의미합니다(해당 파일의 이름은 <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> 파일의 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>DATABASE_NAME``입니다).</p>\n</aside>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>DecimalField``를 사용하도록 각 애플리케이션을 업그레이드하려면, 아래 코드에서 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>&lt;app&gt;``을 각 앱의 이름으로 대체하여 다음을 수행할 수 있습니다:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./manage.py<span class=\"w\"> </span>dumpdata<span class=\"w\"> </span>--format<span class=\"o\">=</span>xml<span class=\"w\"> </span>&lt;app&gt;<span class=\"w\"> </span>&gt;<span class=\"w\"> </span>data-dump.xml\n<span class=\"gp\">$ </span>./manage.py<span class=\"w\"> </span>reset<span class=\"w\"> </span>&lt;app&gt;\n<span class=\"gp\">$ </span>./manage.py<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>data-dump.xml\n</code></pre></div>\n<p>각주:</p>\n<ol class=\"arabic simple\">\n<li><p>이 프로세스의 첫 번째 단계에서 XML 형식을 사용하는 것을 기억하는 것이 중요합니다. 우리는 SQLite를 사용하여 부동 소수점을 십진법으로 이식할 수 있는 XML 데이터 덤프의 기능을 이용하고 있습니다.</p></li>\n<li><p>두 번째 단계에서는 해당 응용 프로그램의 데이터를 잃을 준비가 되었는지 확인하라는 메시지가 표시됩니다. ‘네’라고 대답하십시오; 세 번째 단계에서 이 데이터를 복원할 것입니다.</p></li>\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>DecimalField``는 이 변경 이전에 Django와 함께 제공되는 앱에서는 일절 사용되지 않으므로, 표준 Django 모델에 대해 이 절차를 수행하는 것에 대해 걱정할 필요가 없습니다.</p></li>\n</ol>\n<p>위의 과정에서 문제가 발생하면, 백업된 데이터베이스 파일을 원본 파일에 복사하고 다시 시작하면 됩니다.</p>\n</section>\n</section>\n<section id=\"internationalization\">\n<h3>국제화<a class=\"heading-anchor\" href=\"#internationalization\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"django-views-i18n-set-language-now-requires-a-post-request\">\n<h4>:func:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>django.views.i18n.set_language`는 이제 POST 요청을 필요로 합니다.<a class=\"heading-anchor\" href=\"#django-views-i18n-set-language-now-requires-a-post-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>이전에는 GET 요청이 사용되었습니다. 이전 동작은 상태(사이트를 표시하는 데 사용되는 로케일)가 HTTP 사양의 권장 사항에 위배되는 GET 요청에 의해 변경될 수 있음을 의미했습니다. 이 뷰를 호출하는 코드는 이제 GET 대신 POST 요청이 이루어지도록 해야 합니다. 즉, 더 이상 링크를 사용하여 뷰에 액세스할 수 없지만, 일종의 양식 제출(예: 버튼)을 사용해야 합니다.</p>\n</section>\n<section id=\"is-no-longer-in-builtins\">\n<h4><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>_()``는 더 이상 내장 함수에 없음<a class=\"heading-anchor\" href=\"#is-no-longer-in-builtins\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>_()``(이름이 단일 밑줄인 호출 가능한 객체)는 더 이상 내장 함수들에 몽키패치되지 않습니다. 즉, 더 이상 모든 모듈에서 사용할 수 없습니다.</p>\n<p>이전에 항상 존재하는 <code class=\"docutils literal notranslate\"><span class=\"pre\">_()``에</span> <span class=\"pre\">의존했다면,</span> <span class=\"pre\">이제</span> <span class=\"pre\">적절하다면</span> <span class=\"pre\">``ugettext</span></code> 또는 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>ugettext_lazy``를 명시적으로 임포트하고 직접 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a><a href=\"#id5\"><span class=\"problematic\" id=\"id6\">_`</span></a><a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>에 별칭을 지정해야 합니다:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"http-request-response-objects\">\n<h3>HTTP 요청/응답 객체<a class=\"heading-anchor\" href=\"#http-request-response-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"dictionary-access-to-httprequest\">\n<h4><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>HttpRequest``에 대한 사전 액세스<a class=\"heading-anchor\" href=\"#dictionary-access-to-httprequest\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> 개체는 더 이상 사전 스타일 액세스를 직접 지원하지 않습니다. 이전에는 <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span> <span class=\"pre\">'some_form_key'</span> <span class=\"pre\">in</span> <span class=\"pre\">request``를</span> <span class=\"pre\">사용하거나</span> <span class=\"pre\">``request['some_form_key']``를</span> <span class=\"pre\">읽음으로써</span> <span class=\"pre\">``GET</span></code> 및 <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> 데이터 모두 <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> 객체에서 직접 사용할 수 있었습니다. 이것은 더 이상 지원되지 않습니다. 결합된 <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> 및 <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> 데이터에 액세스해야 하는 경우, 대신 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>request.REQUEST``를 사용하십시오.</p>\n<p>그러나 수신될 것으로 예상되는 요청 유형(<code class=\"docutils literal notranslate\"><span class=\"pre\">request.GET</span></code> 또는 <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code>)에 대해 항상 적절한 사전을 명시적으로 찾아볼 것을 강력하게 제안합니다. 결합된 <code class=\"docutils literal notranslate\"><span class=\"pre\">request.REQUEST</span></code> 사전에 의존하면 들어오는 데이터의 출처를 숨길 수 있습니다.</p>\n</section>\n<section id=\"accessing-httpresponse-headers\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">HTTPResponse</span></code> 헤더 접근<a class=\"heading-anchor\" href=\"#accessing-httpresponse-headers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.http.HttpResponse.headers``는</span> <span class=\"pre\">``_headers``로</span> <span class=\"pre\">이름이</span> <span class=\"pre\">바뀌었고</span> <span class=\"pre\">:class:`~django.http.HttpResponse`는</span> <span class=\"pre\">이제</span> <span class=\"pre\">포함</span> <span class=\"pre\">검사를</span> <span class=\"pre\">직접</span> <span class=\"pre\">지원합니다.</span> <span class=\"pre\">따라서</span> <span class=\"pre\">``if</span> <span class=\"pre\">header</span> <span class=\"pre\">in</span> <span class=\"pre\">response.headers:</span></code> 대신 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>if header in response:<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>를 사용하십시오.</p>\n</section>\n</section>\n<section id=\"generic-relations\">\n<h3>범용 관계<a class=\"heading-anchor\" href=\"#generic-relations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"generic-relations-have-been-moved-out-of-core\">\n<h4>범용 관계가 코어에서 이동됨<a class=\"heading-anchor\" href=\"#generic-relations-have-been-moved-out-of-core\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>범용 관계 클래스 – <code class=\"docutils literal notranslate\"><span class=\"pre\">GenericForeignKey</span></code> 및 <code class=\"docutils literal notranslate\"><span class=\"pre\">GenericRelation</span></code> –은 <a class=\"reference internal\" href=\"/ko/4.2/ref/contrib/contenttypes/#module-django.contrib.contenttypes\" title=\"django.contrib.contenttypes: Provides generic interface to installed models.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.contenttypes</span></code></a> 모듈로 이동했습니다.</p>\n</section>\n</section>\n<section id=\"testing\">\n<h3>테스트중<a class=\"heading-anchor\" href=\"#testing\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"django-test-client-login-has-changed\">\n<h4>:meth:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>django.test.Client.login`이 변경됨<a class=\"heading-anchor\" href=\"#django-test-client-login-has-changed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>이전 (0.96):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Client</span>\n\n<span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">login</span><span class=\"p\">(</span><span class=\"s2\">&quot;/path/to/login&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;myuser&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;mypassword&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>신규 (1.0):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># ... same as above, but then:</span>\n<span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">login</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s2\">&quot;myuser&quot;</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"s2\">&quot;mypassword&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"management-commands\">\n<h3>관리 명령어<a class=\"heading-anchor\" href=\"#management-commands\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"running-management-commands-from-your-code\">\n<h4>코드에서 관리 명령 실행<a class=\"heading-anchor\" href=\"#running-management-commands-from-your-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>:mod:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>django.core.management`가 크게 리팩토링되었습니다.</p>\n<p>코드에서 관리 서비스에 대한 호출은 이제 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>call_command``를 사용해야 합니다. 예를 들어, flush 및 load_data를 호출하는 테스트 코드가 있는 경우:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">management</span>\n\n<span class=\"n\">management</span><span class=\"o\">.</span><span class=\"n\">flush</span><span class=\"p\">(</span><span class=\"n\">verbosity</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">interactive</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"n\">management</span><span class=\"o\">.</span><span class=\"n\">load_data</span><span class=\"p\">([</span><span class=\"s2\">&quot;test_data&quot;</span><span class=\"p\">],</span> <span class=\"n\">verbosity</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>…이 코드를 다음과 같이 변경해야 합니다:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">management</span>\n\n<span class=\"n\">management</span><span class=\"o\">.</span><span class=\"n\">call_command</span><span class=\"p\">(</span><span class=\"s2\">&quot;flush&quot;</span><span class=\"p\">,</span> <span class=\"n\">verbosity</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">interactive</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"n\">management</span><span class=\"o\">.</span><span class=\"n\">call_command</span><span class=\"p\">(</span><span class=\"s2\">&quot;loaddata&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;test_data&quot;</span><span class=\"p\">,</span> <span class=\"n\">verbosity</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"subcommands-must-now-precede-options\">\n<h4>이제 하위 명령이 옵션 앞에 와야 합니다.<a class=\"heading-anchor\" href=\"#subcommands-must-now-precede-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django-admin.py</span></code> 및 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>manage.py``는 이제 옵션 앞에 하위 명령이 필요합니다. 그래서:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>django-admin.py<span class=\"w\"> </span>--settings<span class=\"o\">=</span>foo.bar<span class=\"w\"> </span>runserver\n</code></pre></div>\n<p>…더 이상 작동하지 않으며 다음으로 변경해야 합니다.</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>django-admin.py<span class=\"w\"> </span>runserver<span class=\"w\"> </span>--settings<span class=\"o\">=</span>foo.bar\n</code></pre></div>\n</section>\n</section>\n<section id=\"syndication\">\n<h3>신디케이션<a class=\"heading-anchor\" href=\"#syndication\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"feed-init-has-changed\">\n<h4><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Feed.__init__``이 변경되었습니다.<a class=\"heading-anchor\" href=\"#feed-init-has-changed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>신디케이션 프레임워크의 <code class=\"docutils literal notranslate\"><span class=\"pre\">Feed</span></code> 클래스의 <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> 메서드는 이제 피드의 URL 대신 <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> 객체를 두 번째 매개변수로 사용합니다. 이를 통해 사이트 프레임워크 없이 신디케이션 프레임워크가 작동할 수 있습니다. 이는 <code class=\"docutils literal notranslate\"><span class=\"pre\">Feed``를</span> <span class=\"pre\">하위</span> <span class=\"pre\">클래스로</span> <span class=\"pre\">만들고,</span> <span class=\"pre\">``__init__()</span></code> 메서드를 재정의하는 코드와 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Feed.__init__()``를 직접 호출하는 코드에만 영향을 미칩니다.</p>\n</section>\n</section>\n<section id=\"data-structures\">\n<h3>데이터 구조<a class=\"heading-anchor\" href=\"#data-structures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"sorteddictfromlist-is-gone\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">SortedDictFromList</span></code> 사라짐<a class=\"heading-anchor\" href=\"#sorteddictfromlist-is-gone\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>django.newforms.forms.SortedDictFromList``가 제거되었습니다. <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>django.utils.datastructures.SortedDict``는 이제 일련의 튜플로 인스턴스화될 수 있습니다.</p>\n<p>코드를 업데이트하려면:</p>\n<ol class=\"arabic simple\">\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>django.newforms.forms.SortedDictFromList``를 사용하던 곳에서 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>django.utils.datastructures.SortedDict``를 사용하십시오.</p></li>\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>django.utils.datastructures.SortedDict.copy``는 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>SortedDictFromList.copy()``처럼 깊은 복사본을 반환하지 않기 때문에, 깊은 복사본에 의존하는 경우 코드를 업데이트해야 합니다. <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>copy.deepcopy``를 직접 사용하여 이를 수행하십시오.</p></li>\n</ol>\n</section>\n</section>\n<section id=\"database-backend-functions\">\n<h3>데이터베이스 백엔드 기능<a class=\"heading-anchor\" href=\"#database-backend-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"database-backend-functions-have-been-renamed\">\n<h4>데이터베이스 백엔드 기능의 이름이 변경되었습니다.<a class=\"heading-anchor\" href=\"#database-backend-functions-have-been-renamed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>거의 <em>모든</em> 데이터베이스 백엔드 수준 함수들의 이름이 바뀌거나 재배치되었습니다. 이 중 어느 것도 문서화되지는 않았지만, 이러한 함수들을 사용하는 경우 코드를 변경해야 합니다. 이 함수들은 모두 :mod:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>django.db`에 있습니다.</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>이전 (0.96)</p></th>\n<th class=\"head\"><p>신규 (1.0)</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_autoinc_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.autoinc_sql</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_date_extract_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.date_extract_sql</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_date_trunc_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.date_trunc_sql</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_datetime_cast_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.datetime_cast_sql</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_deferrable_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.deferrable_sql</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_drop_foreignkey_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.drop_foreignkey_sql</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_fulltext_search_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.fulltext_search_sql</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_last_insert_id</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.last_insert_id</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_limit_offset_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.limit_offset_sql</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_max_name_length</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.max_name_length</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_pk_default_value</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.pk_default_value</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_random_function_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.random_function_sql</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_sql_flush</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.sql_flush</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_sql_sequence_reset</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.sequence_reset_sql</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_start_transaction_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.start_transaction_sql</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_tablespace_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.tablespace_sql</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.quote_name</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.quote_name</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_query_set_class</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.query_set_class</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_field_cast_sql</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.field_cast_sql</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.get_drop_sequence</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.ops.drop_sequence_sql</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.OPERATOR_MAPPING</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.operators</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.allows_group_by_ordinal</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.features.allows_group_by_ordinal</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.allows_unique_and_pk</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.features.allows_unique_and_pk</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.autoindexes_primary_keys</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.features.autoindexes_primary_keys</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.needs_datetime_string_cast</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.features.needs_datetime_string_cast</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.needs_upper_for_iops</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.features.needs_upper_for_iops</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.supports_constraints</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.features.supports_constraints</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.supports_tablespaces</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.features.supports_tablespaces</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.uses_case_insensitive_names</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.features.uses_case_insensitive_names</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">backend.uses_custom_queryset</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.features.uses_custom_queryset</span></code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n</section>\n</section>","rootId":"porting-your-apps-from-django-0-96-to-1-0","toc":[{"title":"일반적인 변경 사항","anchor":"common-changes","children":[{"title":"유니코드 사용","anchor":"use-unicode","children":[]},{"title":"모델","anchor":"models","children":[{"title":"``maxlength``를 ``max_length``로 이름 바꾸기","anchor":"rename-maxlength-to-max-length","children":[]},{"title":"``__str__``을 ``__unicode__``로 교체","anchor":"replace-str-with-unicode","children":[]},{"title":"prepopulated_from 제거","anchor":"remove-prepopulated-from","children":[]},{"title":"코어 제거","anchor":"remove-core","children":[]},{"title":"``class Admin:``을 ``admin.py``로 바꾸십시오.","anchor":"replace-class-admin-with-admin-py","children":[]},{"title":"예제","anchor":"example","children":[]}]},{"title":"관리자","anchor":"the-admin","children":[{"title":"새로운 인라인 구문 사용","anchor":"use-new-inline-syntax","children":[]},{"title":"fields 단순화 또는 fieldsets 사용","anchor":"simplify-fields-or-use-fieldsets","children":[]}]},{"title":"URL들","anchor":"urls","children":[{"title":"루트 urls.py 업데이트","anchor":"update-your-root-urls-py","children":[]}]},{"title":"뷰","anchor":"views","children":[{"title":"newforms 대신 django.forms 사용","anchor":"use-django-forms-instead-of-newforms","children":[]},{"title":"새로운 API를 사용하여 업로드된 파일 처리","anchor":"handle-uploaded-files-using-the-new-api","children":[]},{"title":"새 API를 사용하여 파일 필드 작업","anchor":"work-with-file-fields-using-the-new-api","children":[]},{"title":"ObjectPaginator 대신 Paginator 사용","anchor":"use-paginator-instead-of-objectpaginator","children":[]}]},{"title":"템플릿","anchor":"templates","children":[{"title":"자동 이스케이핑을 사랑하는 법 배우기","anchor":"learn-to-love-autoescaping","children":[]}]}]},{"title":"일반적이지 않은 변경 사항","anchor":"less-common-changes","children":[{"title":"시그널","anchor":"signals","children":[]},{"title":"코멘트","anchor":"comments","children":[]},{"title":"템플릿 태그","anchor":"template-tags","children":[{"title":"spaceless 태그","anchor":"spaceless-tag","children":[]}]},{"title":"지역 풍미","anchor":"local-flavors","children":[{"title":"U.S. 지역 풍미","anchor":"u-s-local-flavor","children":[]}]},{"title":"세션","anchor":"sessions","children":[{"title":"새 세션 키 얻기","anchor":"getting-a-new-session-key","children":[]}]},{"title":"픽스처","anchor":"fixtures","children":[{"title":"행을 로드할 때 더 이상 ``save()``를 호출하지 않습니다.","anchor":"loading-a-row-no-longer-calls-save","children":[]}]},{"title":"설정","anchor":"settings","children":[{"title":"더 나은 예외","anchor":"better-exceptions","children":[]},{"title":":setting:`LOGIN_URL`이 이동됨","anchor":"login-url-has-moved","children":[]},{"title":"APPEND_SLASH 동작이 업데이트되었습니다.","anchor":"append-slash-behavior-has-been-updated","children":[]}]},{"title":"더 작은 모델 변경","anchor":"smaller-model-changes","children":[{"title":"``get()``과 다른 예외","anchor":"different-exception-from-get","children":[]},{"title":"``LazyDate``가 제거됨","anchor":"lazydate-has-been-fired","children":[]},{"title":"``DecimalField``는 새로운 기능이며, ``FloatField``이 이제 적절한 float입니다.","anchor":"decimalfield-is-new-and-floatfield-is-now-a-proper-float","children":[]}]},{"title":"국제화","anchor":"internationalization","children":[{"title":":func:`django.views.i18n.set_language`는 이제 POST 요청을 필요로 합니다.","anchor":"django-views-i18n-set-language-now-requires-a-post-request","children":[]},{"title":"``_()``는 더 이상 내장 함수에 없음","anchor":"is-no-longer-in-builtins","children":[]}]},{"title":"HTTP 요청/응답 객체","anchor":"http-request-response-objects","children":[{"title":"``HttpRequest``에 대한 사전 액세스","anchor":"dictionary-access-to-httprequest","children":[]},{"title":"HTTPResponse 헤더 접근","anchor":"accessing-httpresponse-headers","children":[]}]},{"title":"범용 관계","anchor":"generic-relations","children":[{"title":"범용 관계가 코어에서 이동됨","anchor":"generic-relations-have-been-moved-out-of-core","children":[]}]},{"title":"테스트중","anchor":"testing","children":[{"title":":meth:`django.test.Client.login`이 변경됨","anchor":"django-test-client-login-has-changed","children":[]}]},{"title":"관리 명령어","anchor":"management-commands","children":[{"title":"코드에서 관리 명령 실행","anchor":"running-management-commands-from-your-code","children":[]},{"title":"이제 하위 명령이 옵션 앞에 와야 합니다.","anchor":"subcommands-must-now-precede-options","children":[]}]},{"title":"신디케이션","anchor":"syndication","children":[{"title":"``Feed.__init__``이 변경되었습니다.","anchor":"feed-init-has-changed","children":[]}]},{"title":"데이터 구조","anchor":"data-structures","children":[{"title":"SortedDictFromList 사라짐","anchor":"sorteddictfromlist-is-gone","children":[]}]},{"title":"데이터베이스 백엔드 기능","anchor":"database-backend-functions","children":[{"title":"데이터베이스 백엔드 기능의 이름이 변경되었습니다.","anchor":"database-backend-functions-have-been-renamed","children":[]}]}]}],"breadcrumbs":[{"docname":"releases/index","title":"Release notes","url":"/ko/4.2/releases/"},{"docname":"releases/1.0","title":"Django 1.0 릴리스 노트","url":"/ko/4.2/releases/1.0/"}],"prev":{"docname":"releases/1.0","title":"Django 1.0 릴리스 노트","url":"/ko/4.2/releases/1.0/"},"next":{"docname":"releases/0.96","title":"Django 버전 0.96 릴리스 정보","url":"/ko/4.2/releases/0.96/"},"formats":{"html":"/ko/4.2/releases/1.0-porting-guide/","markdown":"/ko/4.2/releases/1.0-porting-guide.md","json":"/ko/4.2/releases/1.0-porting-guide.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/releases/1.0-porting-guide.txt","official":"https://docs.djangoproject.com/ko/4.2/releases/1.0-porting-guide/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}