{"title":"报告问题和请求新功能","version":"4.1","locale":"zh-hans","docname":"internals/contributing/bugs-and-features","url":"/zh-hans/4.1/internals/contributing/bugs-and-features/","canonical":"https://djangodocs.dev/zh-hans/4.1/internals/contributing/bugs-and-features/","summary":"Important 请将安全问题 仅 报告给 security @ djangoproject . com 。 这是一个只对长期以来高度可信的 Django 开发者开放的私人列表，其档案不公开。更多细节，请参见 我们的安全政策 。 另外，在向 工单系统 <https://code.djangoproject.com/>…","html":"<h1>报告问题和请求新功能<a class=\"heading-anchor\" href=\"#reporting-bugs-and-requesting-features\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition admonition-important\">\n<p class=\"admonition-title\">Important</p>\n<p>请将安全问题 <strong>仅</strong> 报告给 <a class=\"reference external\" href=\"mailto:security&#37;&#52;&#48;djangoproject&#46;com\">security<span>&#64;</span>djangoproject<span>&#46;</span>com</a>。 这是一个只对长期以来高度可信的 Django 开发者开放的私人列表，其档案不公开。更多细节，请参见 <a class=\"reference internal\" href=\"/zh-hans/4.1/internals/security/\"><span class=\"doc\">我们的安全政策</span></a>。</p>\n</aside>\n<p>另外，在向 工单系统 &lt;https://code.djangoproject.com/&gt; 报告问题和请求新功能前，请考虑以下几点：</p>\n<ul class=\"simple\">\n<li><p>在工单系统上`搜索`或`自定义查询`，避免其他人已经提交了相同的问题或功能请求。</p></li>\n<li><p>不要在工单系统上提出支持问题，请使用 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">|djang-users|</span></a> 邮件列表或 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>#django`_IRC频道。</p></li>\n<li><p>如果没有在 <a class=\"reference internal\" href=\"/zh-hans/4.1/internals/mailing-lists/#django-developers-mailing-list\"><span class=\"std std-ref\">django-developers</span></a> 上达成一致，不要重新开启已被标记为“不会修复”的问题。</p></li>\n<li><p>不要在工单系统上进行长篇的讨论，因为它们很可能会被丢失。如果某一工单是具有争议的，请前往 <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">|django-developer|</span></a> 讨论。</p></li>\n</ul>\n<section id=\"reporting-bugs\">\n<span id=\"id1\"></span><h2>报告问题<a class=\"heading-anchor\" href=\"#reporting-bugs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>编写良好的 Bug 报告是非常有帮助的。不过，在 Bug 追踪系统中处理它们需要一定的开销。因此，我们希望您能尽量提交有用处的 Bug 报告。具体地：</p>\n<ul class=\"simple\">\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>请**先阅读 :doc:<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>FAQ &lt;/faq/index&gt;`寻找答案</p></li>\n<li><p><strong>请</strong>  先在 <a class=\"reference internal\" href=\"/zh-hans/4.1/internals/mailing-lists/#django-users-mailing-list\"><span class=\"std std-ref\">django-users</span></a> 或 #django 上提问，如果不确定你遇到的问题是否是 Bug。</p></li>\n<li><p><strong>请</strong> 编写完整、可复现的、具体的 bug 报告。你必须简洁且清楚地描述所遇到的问题，并提供复现所需要的步骤。尽可能多地提供代码片段、测试用例、异常回溯、截图等调试信息。一个简洁明了的测试用例是最好的报告 bug 的方法，因为它能让我们快速地确认 bug。</p></li>\n<li><p><strong>请不要</strong> 只因为想要提交bug报告而向 <a class=\"reference internal\" href=\"/zh-hans/4.1/internals/mailing-lists/#django-developers-mailing-list\"><span class=\"std std-ref\">django-developers</span></a> 发送邮件。 所有 bug 报告都会被发送到 <a class=\"reference internal\" href=\"/zh-hans/4.1/internals/mailing-lists/#django-updates-mailing-list\"><span class=\"std std-ref\">django-updates</span></a> 这个邮件列表。开发者和感兴趣的社区成员都会跟踪这个邮件列表，你提交了我们就能看到。</p></li>\n</ul>\n<p>要了解你创建的工单的生命周期，请参阅：doc: triaging-tickets。</p>\n</section>\n<section id=\"reporting-user-interface-bugs-and-features\">\n<h2>报告用户界面的 bug 和功能<a class=\"heading-anchor\" href=\"#reporting-user-interface-bugs-and-features\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>如果你的 bug 或功能请求涉及任何视觉上的东西，则要遵守一些额外的指导：</p>\n<ul class=\"simple\">\n<li><p>Include screenshots in your ticket which are the visual equivalent of a\nminimal test case. Show off the issue, not the crazy customizations\nyou've made to your browser.</p></li>\n<li><p>如果这个问题很难用图片展示，考虑制作一段简短的屏幕录像。如果你使用的软件支持，最好只录制屏幕上相关的区域。</p></li>\n<li><p>If you're offering a patch that changes the look or behavior of Django's\nUI, you <strong>must</strong> attach before <em>and</em> after screenshots/screencasts.\nTickets lacking these are difficult for triagers to assess quickly.</p></li>\n<li><p>即使提供了屏幕截图，也请你仍然遵守其它的惯例。请一定提交相关的 URL 和代码片断，以及复现截图所示行为需要的步骤。</p></li>\n<li><p>请给你的工单打上 &quot;UI/UX&quot; 的标记，以便感兴趣的人能找到你的工单。</p></li>\n</ul>\n</section>\n<section id=\"requesting-features\">\n<h2>请求的功能<a class=\"heading-anchor\" href=\"#requesting-features\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>我们一直致力于让 Django 变得更好，而你们提出的功能请求是关键的一部分。以下几点能让你更有效地提出功能请求：</p>\n<ul class=\"simple\">\n<li><p>确认这个特性真的需要改动 Django 的核心。如果你的想法能通过独立的应用或模块实现（比如说你希望支持另一个数据库引擎），我们可能会建议你独立地开发它。而当你的项目获得足够的社区支持时，我们可能会考虑将它纳入 Django。</p></li>\n<li><p>首先请求| django-developers <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">|</span></a>列表上的功能，而不是在工单跟踪。 如果它在邮件列表中，将会得到更仔细地阅读。 这对于大规模功能请求来说更为重要。 在实际操作之前，我们倾向在邮件列表上讨论Django核心的任何重大变化。</p></li>\n<li><p>清楚而简洁地描述缺少的功能以及您希望如何实施。 如果可能，请包括示例代码（没有功能也可）。</p></li>\n<li><p>解释 <em>为什么</em> 你喜欢这个特性。给出一个一个最小可用的例子可以让其他人理解它能被纳入，以及如果有其它办法实现相同的效果。</p></li>\n</ul>\n<p>If there's a consensus agreement on the feature, then it's appropriate to\ncreate a ticket. Include a link to the discussion on <a class=\"reference internal\" href=\"/zh-hans/4.1/internals/mailing-lists/#django-developers-mailing-list\"><span class=\"std std-ref\">django-developers</span></a> in the\nticket description.</p>\n<p>与大多数开源项目一样， code talks。 如果您愿意自己编写该功能的代码，或者更好的是如果您已经编写了代码，则更有可能被接受。 只需在GitHub上 fork Django项目，创建一个功能分支，并向我们展示您的工作！</p>\n<p>另请参阅：：ref：documenting-new-features。</p>\n</section>\n<section id=\"how-we-make-decisions\">\n<span id=\"id2\"></span><h2>我们如何作出决定<a class=\"heading-anchor\" href=\"#how-we-make-decisions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Whenever possible, we strive for a rough consensus. To that end, we'll often\nhave informal votes on <a class=\"reference internal\" href=\"/zh-hans/4.1/internals/mailing-lists/#django-developers-mailing-list\"><span class=\"std std-ref\">django-developers</span></a> or the Django Forum about a feature.\nIn these votes we follow the voting style invented by Apache and used on Python\nitself, where votes are given as +1, +0, -0, or -1.\nRoughly translated, these votes mean:</p>\n<ul class=\"simple\">\n<li><p>+1: &quot;我喜欢这个想法，强烈支持。&quot;</p></li>\n<li><p>+0: &quot;看起来没问题。&quot;</p></li>\n<li><p>-0: &quot;我不觉得特别好，不过也不反对。&quot;</p></li>\n<li><p>-1: &quot;我强烈反对。如果这个想法变成了现实，我会很不高兴。&quot;</p></li>\n</ul>\n<p>Although these votes are informal, they'll be taken very seriously. After a\nsuitable voting period, if an obvious consensus arises we'll follow the votes.</p>\n<p>However, consensus is not always possible. If consensus cannot be reached, or\nif the discussion toward a consensus fizzles out without a concrete decision,\nthe decision may be deferred to the <a class=\"reference internal\" href=\"/zh-hans/4.1/internals/organization/#steering-council\"><span class=\"std std-ref\">steering council</span></a>.</p>\n<p>Internally, the steering council will use the same voting mechanism. A\nproposition will be considered carried if:</p>\n<ul class=\"simple\">\n<li><p>There are at least three &quot;+1&quot; votes from members of the steering council.</p></li>\n<li><p>There is no &quot;-1&quot; vote from any member of the steering council.</p></li>\n</ul>\n<p>投票应该在一周内提交。</p>\n<p>Since this process allows any steering council member to veto a proposal, a\n&quot;-1&quot; vote should be accompanied by an explanation of what it would take to\nconvert that &quot;-1&quot; into at least a &quot;+0&quot;.</p>\n<p>Votes on technical matters should be announced and held in public on the\n<a class=\"reference internal\" href=\"/zh-hans/4.1/internals/mailing-lists/#django-developers-mailing-list\"><span class=\"std std-ref\">django-developers</span></a> mailing list or on the Django Forum.</p>\n</section>","rootId":"reporting-bugs-and-requesting-features","toc":[{"title":"报告问题","anchor":"reporting-bugs","children":[]},{"title":"报告用户界面的 bug 和功能","anchor":"reporting-user-interface-bugs-and-features","children":[]},{"title":"请求的功能","anchor":"requesting-features","children":[]},{"title":"我们如何作出决定","anchor":"how-we-make-decisions","children":[]}],"breadcrumbs":[{"docname":"internals/index","title":"Django internals","url":"/zh-hans/4.1/internals/"},{"docname":"internals/contributing/index","title":"为 Django 做贡献","url":"/zh-hans/4.1/internals/contributing/"}],"prev":{"docname":"internals/contributing/new-contributors","title":"对新贡献者的建议","url":"/zh-hans/4.1/internals/contributing/new-contributors/"},"next":{"docname":"internals/contributing/triaging-tickets","title":"分类工单","url":"/zh-hans/4.1/internals/contributing/triaging-tickets/"},"formats":{"html":"/zh-hans/4.1/internals/contributing/bugs-and-features/","markdown":"/zh-hans/4.1/internals/contributing/bugs-and-features.md","json":"/zh-hans/4.1/internals/contributing/bugs-and-features.json"},"source":"https://github.com/django/django/blob/stable/4.1.x/docs/internals/contributing/bugs-and-features.txt","official":"https://docs.djangoproject.com/zh-hans/4.1/internals/contributing/bugs-and-features/","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"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}