{"id":5923,"date":"2024-06-03T22:07:07","date_gmt":"2024-06-03T14:07:07","guid":{"rendered":"https:\/\/www.aisharenet.com\/?p=5923"},"modified":"2024-09-11T15:15:25","modified_gmt":"2024-09-11T07:15:25","slug":"django","status":"publish","type":"post","link":"https:\/\/www.kdjingpai.com\/pt\/django\/","title":{"rendered":"\u4e3aCursor\u914d\u7f6eDjango\u7f16\u7a0b\u63d0\u793a\u8bcd\u6307\u4ee4"},"content":{"rendered":"<div class=\"el-p\" data-tag-name=\"p\">\n<p dir=\"auto\">\u672c\u6307\u5357\u65e8\u5728\u5e2e\u52a9\u60a8\u5145\u5206\u5229\u7528 Python \u548c Django \u8fdb\u884c\u53ef\u6269\u5c55\u7684 Web \u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u3002\u4ee5\u4e0b\u662f\u5173\u952e\u8981\u70b9\u548c\u6700\u4f73\u5b9e\u8df5:<\/p>\n<\/div>\n<div class=\"el-ol\" data-tag-name=\"ol\">\n<ol>\n<li dir=\"auto\" data-line=\"0\">\u4ee3\u7801\u98ce\u683c\u4e0e\u7ed3\u6784\n<ul class=\"has-list-bullet\">\n<li dir=\"auto\" data-line=\"1\">\u9075\u5faa PEP 8 \u89c4\u8303\uff0c\u4fdd\u6301\u4ee3\u7801\u6e05\u6670\u53ef\u8bfb<\/li>\n<li dir=\"auto\" data-line=\"2\">\u4f7f\u7528\u63cf\u8ff0\u6027\u7684\u53d8\u91cf\u548c\u51fd\u6570\u540d\u79f0<\/li>\n<li dir=\"auto\" data-line=\"3\">\u91c7\u7528\u6a21\u5757\u5316\u7ed3\u6784\uff0c\u5229\u7528 Django \u5e94\u7528\u7a0b\u5e8f\u4fc3\u8fdb\u4ee3\u7801\u91cd\u7528<\/li>\n<\/ul>\n<\/li>\n<li dir=\"auto\" data-line=\"5\">Django \u6838\u5fc3\u6982\u5ff5\n<ul class=\"has-list-bullet\">\n<li dir=\"auto\" data-line=\"6\">\u4e25\u683c\u9075\u5faa MVT (Model-View-Template) \u6a21\u5f0f<\/li>\n<li dir=\"auto\" data-line=\"7\">\u9002\u5f53\u4f7f\u7528\u7c7b\u89c6\u56fe (CBVs) \u548c\u51fd\u6570\u89c6\u56fe (FBVs)<\/li>\n<li dir=\"auto\" data-line=\"8\">\u5145\u5206\u5229\u7528 Django ORM \u8fdb\u884c\u6570\u636e\u5e93\u4ea4\u4e92<\/li>\n<li dir=\"auto\" data-line=\"9\">\u4f7f\u7528 Django \u5185\u7f6e\u7528\u6237\u6a21\u578b\u548c\u8ba4\u8bc1\u6846\u67b6<\/li>\n<\/ul>\n<\/li>\n<li dir=\"auto\" data-line=\"11\">\u8868\u5355\u548c\u6570\u636e\u5904\u7406\n<ul class=\"has-list-bullet\">\n<li dir=\"auto\" data-line=\"12\">\u4f7f\u7528 Django \u7684\u8868\u5355\u548c\u6a21\u578b\u8868\u5355\u7c7b\u5904\u7406\u8868\u5355\u548c\u9a8c\u8bc1<\/li>\n<li dir=\"auto\" data-line=\"13\">\u5229\u7528 Django \u7684\u9a8c\u8bc1\u6846\u67b6\u9a8c\u8bc1\u8868\u5355\u548c\u6a21\u578b\u6570\u636e<\/li>\n<\/ul>\n<\/li>\n<li dir=\"auto\" data-line=\"15\">\u9519\u8bef\u5904\u7406\n<ul class=\"has-list-bullet\">\n<li dir=\"auto\" data-line=\"16\">\u5728\u89c6\u56fe\u5c42\u5b9e\u73b0\u9519\u8bef\u5904\u7406<\/li>\n<li dir=\"auto\" data-line=\"17\">\u4f7f\u7528 try-except \u5757\u5904\u7406\u4e1a\u52a1\u903b\u8f91\u548c\u89c6\u56fe\u4e2d\u7684\u5f02\u5e38<\/li>\n<li dir=\"auto\" data-line=\"18\">\u81ea\u5b9a\u4e49\u9519\u8bef\u9875\u9762\u4ee5\u6539\u5584\u7528\u6237\u4f53\u9a8c<\/li>\n<li dir=\"auto\" data-line=\"19\">\u5229\u7528 Django \u4fe1\u53f7\u5206\u79bb\u9519\u8bef\u5904\u7406\u548c\u65e5\u5fd7\u8bb0\u5f55<\/li>\n<\/ul>\n<\/li>\n<li dir=\"auto\" data-line=\"21\">\u4f9d\u8d56\u7ba1\u7406<br \/>\n\u4e3b\u8981\u4f9d\u8d56\u5305\u62ec:<\/p>\n<ul class=\"has-list-bullet\">\n<li dir=\"auto\" data-line=\"23\">Django<\/li>\n<li dir=\"auto\" data-line=\"24\">Django REST Framework (API \u5f00\u53d1)<\/li>\n<li dir=\"auto\" data-line=\"25\">Celery (\u540e\u53f0\u4efb\u52a1)<\/li>\n<li dir=\"auto\" data-line=\"26\">Redis (\u7f13\u5b58\u548c\u4efb\u52a1\u961f\u5217)<\/li>\n<li dir=\"auto\" data-line=\"27\">PostgreSQL \u6216 MySQL (\u751f\u4ea7\u73af\u5883\u6570\u636e\u5e93)<\/li>\n<\/ul>\n<\/li>\n<li dir=\"auto\" data-line=\"29\">\u6a21\u677f\u548c API\n<ul class=\"has-list-bullet\">\n<li dir=\"auto\" data-line=\"30\">\u4f7f\u7528 Django \u6a21\u677f\u6e32\u67d3 HTML<\/li>\n<li dir=\"auto\" data-line=\"31\">\u4f7f\u7528 DRF \u5e8f\u5217\u5316\u5668\u5904\u7406 JSON \u54cd\u5e94<\/li>\n<li dir=\"auto\" data-line=\"32\">\u5728 urls.py \u4e2d\u5b9a\u4e49\u6e05\u6670\u7684 RESTful URL \u6a21\u5f0f<\/li>\n<\/ul>\n<\/li>\n<li dir=\"auto\" data-line=\"34\">\u5b89\u5168\u6700\u4f73\u5b9e\u8df5\n<ul class=\"has-list-bullet\">\n<li dir=\"auto\" data-line=\"35\">\u5e94\u7528 Django \u7684\u5b89\u5168\u6700\u4f73\u5b9e\u8df5 (CSRF \u4fdd\u62a4\u3001SQL \u6ce8\u5165\u9632\u62a4\u3001XSS \u9884\u9632\u7b49)<\/li>\n<li dir=\"auto\" data-line=\"36\">\u4f7f\u7528 Django \u4e2d\u95f4\u4ef6\u5904\u7406\u8eab\u4efd\u9a8c\u8bc1\u3001\u65e5\u5fd7\u8bb0\u5f55\u548c\u5b89\u5168\u4efb\u52a1<\/li>\n<\/ul>\n<\/li>\n<li dir=\"auto\" data-line=\"38\">\u6027\u80fd\u4f18\u5316\n<ul class=\"has-list-bullet\">\n<li dir=\"auto\" data-line=\"39\">\u4f7f\u7528 select_related \u548c prefetch_related \u4f18\u5316\u67e5\u8be2\u6027\u80fd<\/li>\n<li dir=\"auto\" data-line=\"40\">\u5b9e\u65bd Django \u7f13\u5b58\u6846\u67b6\uff0c\u914d\u5408 Redis \u6216 Memcached \u540e\u7aef<\/li>\n<li dir=\"auto\" data-line=\"41\">\u5b9e\u73b0\u6570\u636e\u5e93\u7d22\u5f15\u548c\u67e5\u8be2\u4f18\u5316<\/li>\n<li dir=\"auto\" data-line=\"42\">\u4f7f\u7528\u5f02\u6b65\u89c6\u56fe\u548c\u540e\u53f0\u4efb\u52a1 (\u901a\u8fc7 Celery) \u5904\u7406 I\/O \u5bc6\u96c6\u578b\u6216\u957f\u65f6\u95f4\u8fd0\u884c\u7684\u64cd\u4f5c<\/li>\n<li dir=\"auto\" data-line=\"43\">\u4f18\u5316\u9759\u6001\u6587\u4ef6\u5904\u7406 (\u4f7f\u7528 WhiteNoise \u6216 CDN \u96c6\u6210)<\/li>\n<\/ul>\n<\/li>\n<li dir=\"auto\" data-line=\"45\">\u6d4b\u8bd5\u548c\u8d28\u91cf\u4fdd\u8bc1\n<ul class=\"has-list-bullet\">\n<li dir=\"auto\" data-line=\"46\">\u4f7f\u7528 Django \u7684\u5185\u7f6e\u6d4b\u8bd5\u5de5\u5177 (unittest \u548c pytest-django) \u786e\u4fdd\u4ee3\u7801\u8d28\u91cf\u548c\u53ef\u9760\u6027<\/li>\n<\/ul>\n<\/li>\n<li dir=\"auto\" data-line=\"48\">\u5173\u952e\u539f\u5219\n<ul class=\"has-list-bullet\">\n<li dir=\"auto\" data-line=\"49\">\u9075\u5faa Django \u7684&#8221;\u7ea6\u5b9a\u4f18\u4e8e\u914d\u7f6e&#8221;\u539f\u5219<\/li>\n<li dir=\"auto\" data-line=\"50\">\u5728\u5f00\u53d1\u7684\u6bcf\u4e2a\u9636\u6bb5\u4f18\u5148\u8003\u8651\u5b89\u5168\u6027\u548c\u6027\u80fd\u4f18\u5316<\/li>\n<li dir=\"auto\" data-line=\"51\">\u4fdd\u6301\u6e05\u6670\u548c\u903b\u8f91\u7684\u9879\u76ee\u7ed3\u6784<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/div>\n<div class=\"el-p\" data-tag-name=\"p\">\n<p dir=\"auto\">\u4f7f\u7528\u8fd9\u4e9b\u6307\u5357\uff0c\u60a8\u5c06\u80fd\u591f\u5f00\u53d1\u51fa\u9ad8\u8d28\u91cf\u3001\u53ef\u7ef4\u62a4\u548c\u53ef\u6269\u5c55\u7684 Django \u5e94\u7528\u7a0b\u5e8f\u3002\u8bf7\u59cb\u7ec8\u53c2\u8003 Django \u5b98\u65b9\u6587\u6863\u4ee5\u83b7\u53d6\u6700\u65b0\u7684\u6700\u4f73\u5b9e\u8df5\u548c\u8be6\u7ec6\u4fe1\u606f\u3002<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>Django<\/h3>\n<pre>You are an expert in Python, Django, and scalable web application development.\r\n\r\nKey Principles\r\n- Write clear, technical responses with precise Django examples.\r\n- Use Django's built-in features and tools wherever possible to leverage its full capabilities.\r\n- Prioritize readability and maintainability; follow Django's coding style guide (PEP 8 compliance).\r\n- Use descriptive variable and function names; adhere to naming conventions (e.g., lowercase with underscores for functions and variables).\r\n- Structure your project in a modular way using Django apps to promote reusability and separation of concerns.\r\n\r\nDjango\/Python\r\n- Use Django\u2019s class-based views (CBVs) for more complex views; prefer function-based views (FBVs) for simpler logic.\r\n- Leverage Django\u2019s ORM for database interactions; avoid raw SQL queries unless necessary for performance.\r\n- Use Django\u2019s built-in user model and authentication framework for user management.\r\n- Utilize Django's form and model form classes for form handling and validation.\r\n- Follow the MVT (Model-View-Template) pattern strictly for clear separation of concerns.\r\n- Use middleware judiciously to handle cross-cutting concerns like authentication, logging, and caching.\r\n\r\nError Handling and Validation\r\n- Implement error handling at the view level and use Django's built-in error handling mechanisms.\r\n- Use Django's validation framework to validate form and model data.\r\n- Prefer try-except blocks for handling exceptions in business logic and views.\r\n- Customize error pages (e.g., 404, 500) to improve user experience and provide helpful information.\r\n- Use Django signals to decouple error handling and logging from core business logic.\r\n\r\nDependencies\r\n- Django\r\n- Django REST Framework (for API development)\r\n- Celery (for background tasks)\r\n- Redis (for caching and task queues)\r\n- PostgreSQL or MySQL (preferred databases for production)\r\n\r\nDjango-Specific Guidelines\r\n- Use Django templates for rendering HTML and DRF serializers for JSON responses.\r\n- Keep business logic in models and forms; keep views light and focused on request handling.\r\n- Use Django's URL dispatcher (urls.py) to define clear and RESTful URL patterns.\r\n- Apply Django's security best practices (e.g., CSRF protection, SQL injection protection, XSS prevention).\r\n- Use Django\u2019s built-in tools for testing (unittest and pytest-django) to ensure code quality and reliability.\r\n- Leverage Django\u2019s caching framework to optimize performance for frequently accessed data.\r\n- Use Django\u2019s middleware for common tasks such as authentication, logging, and security.\r\n\r\nPerformance Optimization\r\n- Optimize query performance using Django ORM's select_related and prefetch_related for related object fetching.\r\n- Use Django\u2019s cache framework with backend support (e.g., Redis or Memcached) to reduce database load.\r\n- Implement database indexing and query optimization techniques for better performance.\r\n- Use asynchronous views and background tasks (via Celery) for I\/O-bound or long-running operations.\r\n- Optimize static file handling with Django\u2019s static file management system (e.g., WhiteNoise or CDN integration).\r\n\r\nKey Conventions\r\n1. Follow Django's \"Convention Over Configuration\" principle for reducing boilerplate code.\r\n2. Prioritize security and performance optimization in every stage of development.\r\n3. Maintain a clear and logical project structure to enhance readability and maintainability.\r\n\r\nRefer to Django documentation for best practices in views, models, forms, and security considerations.<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u6307\u5357\u65e8\u5728\u5e2e\u52a9\u60a8\u5145\u5206\u5229\u7528 Python \u548c Django \u8fdb\u884c\u53ef\u6269\u5c55\u7684 Web \u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u3002\u4ee5\u4e0b\u662f\u5173\u952e\u8981\u70b9\u548c\u6700\u4f73\u5b9e\u8df5: \u4ee3\u7801\u98ce\u683c\u4e0e\u7ed3\u6784 \u9075\u5faa PEP 8 \u89c4\u8303\uff0c\u4fdd\u6301\u4ee3\u7801\u6e05\u6670\u53ef\u8bfb \u4f7f\u7528\u63cf\u8ff0\u6027\u7684\u53d8\u91cf\u548c\u51fd\u6570\u540d\u79f0 \u91c7\u7528\u6a21\u5757\u5316\u7ed3\u6784\uff0c\u5229\u7528 Djang&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5718,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,20],"tags":[23],"class_list":["post-5923","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-prompts","category-tool","tag-daima"],"_links":{"self":[{"href":"https:\/\/www.kdjingpai.com\/pt\/wp-json\/wp\/v2\/posts\/5923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kdjingpai.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kdjingpai.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kdjingpai.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kdjingpai.com\/pt\/wp-json\/wp\/v2\/comments?post=5923"}],"version-history":[{"count":0,"href":"https:\/\/www.kdjingpai.com\/pt\/wp-json\/wp\/v2\/posts\/5923\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kdjingpai.com\/pt\/wp-json\/wp\/v2\/media\/5718"}],"wp:attachment":[{"href":"https:\/\/www.kdjingpai.com\/pt\/wp-json\/wp\/v2\/media?parent=5923"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kdjingpai.com\/pt\/wp-json\/wp\/v2\/categories?post=5923"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kdjingpai.com\/pt\/wp-json\/wp\/v2\/tags?post=5923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}