{"id":1249,"date":"2022-11-27T21:56:58","date_gmt":"2022-11-27T13:56:58","guid":{"rendered":"https:\/\/www.iotot.com\/?p=1249"},"modified":"2022-11-27T21:56:58","modified_gmt":"2022-11-27T13:56:58","slug":"%e6%b5%85%e8%b0%88python-django%e6%a1%86%e6%9e%b6","status":"publish","type":"post","link":"https:\/\/blog.iotot.com\/?p=1249","title":{"rendered":"\u6d45\u8c08Python Django\u6846\u67b6"},"content":{"rendered":"<p data-first-child=\"\" data-pid=\"2UQB4glH\"><b>1\u3001Django\u7b80\u4ecb<\/b><\/p>\n<p data-pid=\"DFINZ_k2\">Python\u4e0b\u6709\u591a\u6b3e\u4e0d\u540c\u7684 Web \u6846\u67b6\uff0cDjango\u662f\u6700\u6709\u4ee3\u8868\u6027\u7684\u4e00\u79cd\u3002\u8bb8\u591a\u6210\u529f\u7684\u7f51\u7ad9\u548cAPP\u90fd\u57fa\u4e8eDjango\u3002<\/p>\n<p data-pid=\"VbonoYCp\">Django\u662f\u4e00\u4e2a\u5f00\u6e90\u7684Web\u5e94\u7528\u6846\u67b6\uff0c\u7531Python\u5199\u6210\u3002<\/p>\n<p data-pid=\"bBBDUr2n\">Django\u91c7\u7528\u4e86MVC\u7684\u8f6f\u4ef6\u8bbe\u8ba1\u6a21\u5f0f\uff0c\u5373\u6a21\u578bM\uff0c\u89c6\u56feV\u548c\u63a7\u5236\u5668C\u3002<\/p>\n<p data-pid=\"RWURP4Td\"><b>2\u3001Django\u7684\u7279\u70b9<\/b><\/p>\n<p data-pid=\"yuCY9dq6\">1) \u5f3a\u5927\u7684\u6570\u636e\u5e93\u529f\u80fd\uff1a\u7528python\u7684\u7c7b\u7ee7\u627f\uff0c\u51e0\u884c\u4ee3\u7801\u5c31\u53ef\u4ee5\u62e5\u6709\u4e00\u4e2a\u52a8\u6001\u7684\u6570\u636e\u5e93\u64cd\u4f5cAPI\uff0c\u5982\u679c\u9700\u8981\u4e5f\u80fd\u6267\u884cSQL\u8bed\u53e5\u3002<\/p>\n<p data-pid=\"HcEplOYi\">2) \u81ea\u5e26\u7684\u5f3a\u5927\u7684\u540e\u53f0\u529f\u80fd\uff1a\u51e0\u884c\u4ee3\u7801\u5c31\u8ba9\u7f51\u7ad9\u62e5\u6709\u4e00\u4e2a\u5f3a\u5927\u7684\u540e\u53f0\uff0c\u8f7b\u677e\u7ba1\u7406\u5185\u5bb9\u3002<\/p>\n<p data-pid=\"CN9qfn-8\">3) \u4f18\u96c5\u7684\u7f51\u5740\uff1a\u7528\u6b63\u5219\u5339\u914d\u7f51\u5740\uff0c\u4f20\u9012\u5230\u5bf9\u5e94\u51fd\u6570\u3002<\/p>\n<p data-pid=\"rzzLAE1r\">4) \u6a21\u677f\u7cfb\u7edf\uff1a\u5f3a\u5927\uff0c\u6613\u6269\u5c55\u7684\u6a21\u677f\u7cfb\u7edf\uff0c\u8bbe\u8ba1\u7b80\u6613\uff0c\u4ee3\u7801\u548c\u6837\u5f0f\u5206\u5f00\u8bbe\u8ba1\uff0c\u66f4\u6613\u7ba1\u7406\u3002<\/p>\n<p data-pid=\"FXJIK8N0\">5) \u7f13\u5b58\u7cfb\u7edf\uff1a\u4e0ememcached\u6216\u5176\u5b83\u7f13\u5b58\u7cfb\u7edf\u8054\u7528\uff0c\u8868\u73b0\u66f4\u51fa\u8272\uff0c\u52a0\u8f7d\u901f\u5ea6\u66f4\u5feb\u3002<\/p>\n<p data-pid=\"tQUcnkUs\">6) \u56fd\u9645\u5316\uff1a\u5b8c\u5168\u652f\u6301\u591a\u8bed\u8a00\u5e94\u7528\uff0c\u5141\u8bb8\u4f60\u5b9a\u4e49\u7ffb\u8bd1\u7684\u5b57\u7b26\uff0c\u8f7b\u677e\u7ffb\u8bd1\u6210\u4e0d\u540c\u56fd\u5bb6\u7684\u8bed\u8a00\u3002<\/p>\n<p data-pid=\"a-K7_gJs\"><b>3\u3001Django\u9879\u76ee\u76ee\u5f55<\/b><\/p>\n<p data-pid=\"Y0Hey766\">1) urls.py\uff1a\u7f51\u5740\u5165\u53e3\uff0c\u5173\u8054\u5230\u5bf9\u5e94\u7684views.py\u4e2d\u7684\u4e00\u4e2a\u51fd\u6570\uff08\u6216generic\u7c7b\uff09\uff0c\u8bbf\u95ee\u7f51\u5740\u5c31\u5bf9\u5e94\u4e00\u4e2a\u51fd\u6570\u3002<\/p>\n<p data-pid=\"pFn1oCI7\">2) views.py\uff1a\u5904\u7406\u7528\u6237\u53d1\u51fa\u7684\u8bf7\u6c42\uff0c\u4e0eurls.py\u5bf9\u5e94, \u901a\u8fc7\u6e32\u67d3templates\u4e2d\u7684\u7f51\u9875\u53ef\u4ee5\u5c06\u663e\u793a\u5185\u5bb9\uff0c\u5982\u767b\u9646\u540e\u7684\u7528\u6237\u540d\uff0c\u7528\u6237\u8bf7\u6c42\u7684\u6570\u636e\u7b49\u8f93\u51fa\u5230\u7f51\u9875\u3002<\/p>\n<p data-pid=\"UVK81aAV\">3) models.py\uff1a\u4e0e\u6570\u636e\u5e93\u64cd\u4f5c\u76f8\u5173\uff0c\u5b58\u5165\u6216\u8bfb\u53d6\u6570\u636e\u65f6\u7528\u5230\uff0c\u7528\u4e0d\u5230\u6570\u636e\u5e93\u65f6\u53ef\u4ee5\u4e0d\u4f7f\u7528\u3002<\/p>\n<p data-pid=\"Ytn1DCzC\">4) forms.py\uff1a\u8868\u5355\uff0c\u7528\u6237\u5728\u6d4f\u89c8\u5668\u4e0a\u8f93\u5165\u6570\u636e\u63d0\u4ea4\uff0c\u5bf9\u6570\u636e\u7684\u9a8c\u8bc1\u5de5\u4f5c\u4ee5\u53ca\u8f93\u5165\u6846\u7684\u751f\u6210\u7b49\u5de5\u4f5c\uff0c\u4e5f\u53ef\u4ee5\u4e0d\u4f7f\u7528\u3002<\/p>\n<p data-pid=\"yAm2HH11\">5) templates\u6587\u4ef6\u5939\uff1aviews.py\u4e2d\u7684\u51fd\u6570\u6e32\u67d3templates\u4e2d\u7684html\u6a21\u677f\uff0c\u5f97\u5230\u52a8\u6001\u5185\u5bb9\u7684\u7f51\u9875\uff0c\u53ef\u4ee5\u7528\u7f13\u5b58\u6765\u63d0\u9ad8\u901f\u5ea6\u3002<\/p>\n<p data-pid=\"q7zQdMg6\">6) admin.py\uff1a\u540e\u53f0\uff0c\u53ef\u4ee5\u7528\u5f88\u5c11\u7684\u4ee3\u7801\u5c31\u62e5\u6709\u4e00\u4e2a\u5f3a\u5927\u7684\u540e\u53f0\u3002<\/p>\n<p data-pid=\"GvFgEU0L\">7) settings.py\uff1aDjango \u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5982 DEBUG \u7684\u5f00\u5173\uff0c\u9759\u6001\u6587\u4ef6\u7684\u4f4d\u7f6e\u7b49\u3002<\/p>\n<p data-pid=\"PFbVQrCz\"><b>4\u3001Django\u57fa\u672c\u547d\u4ee4<\/b><\/p>\n<p data-pid=\"ezalQsbH\">1) \u65b0\u5efa\u4e00\u4e2a\u9879\u76ee\uff1a<\/p>\n<ol>\n<li data-pid=\"LGMuI51X\">django-admin.py startproject project-name<\/li>\n<\/ol>\n<p data-pid=\"gcwbtPjO\">\u5728 windows \u4e0a\u5982\u679c\u62a5\u9519\uff0c\u5c1d\u8bd5\u7528 django-admin \u4ee3\u66ff django-admin.py \u3002<\/p>\n<p data-pid=\"YwJ425K5\">2) \u65b0\u5efa\u4e00\u4e2aAPP\uff1a<\/p>\n<ol>\n<li data-pid=\"-pPZO5tk\">python manage.py startapp app-name<\/li>\n<\/ol>\n<p data-pid=\"oBM1ZqC3\">\u6216<\/p>\n<ol>\n<li data-pid=\"Yk0eIvJQ\">django-admin.py startapp app-name<\/li>\n<\/ol>\n<p data-pid=\"GsX8JBSC\">\u4e00\u822c\u4e00\u4e2a\u9879\u76ee\u6709\u591a\u4e2aapp, \u5f53\u7136\u901a\u7528\u7684app\u4e5f\u53ef\u4ee5\u5728\u591a\u4e2a\u9879\u76ee\u4e2d\u4f7f\u7528\u3002<\/p>\n<p data-pid=\"G6zbH7d9\">3) \u542f\u52a8\u670d\u52a1\u5668\uff1a<\/p>\n<ol>\n<li data-pid=\"PP6X48vu\">python manage.py runserver 0.0.0.0:8000<\/li>\n<\/ol>\n<p data-pid=\"8puTz7yY\">\u6216<\/p>\n<ol>\n<li data-pid=\"bvxOKjAQ\">python manage.py runserver<\/li>\n<\/ol>\n<p data-pid=\"SV8Ugty9\">\u524d\u8005\u8ba9\u5176\u5b83\u7535\u8111\u53ef\u8fde\u63a5\u5230\u670d\u52a1\u5668\uff0c\u76d1\u542c\u673a\u5668\u4e0a\u6240\u6709ip\u76848000\u7aef\u53e3\uff0c\u8bbf\u95ee\u65f6\u7528\u7535\u8111\u7684ip\u4ee3\u66ff 127.0.0.1\uff088000\u4e3a\u7aef\u53e3\u53f7\uff0c\u5982\u679c\u4e0d\u8bf4\u660e\uff0c\u5219\u7aef\u53e3\u53f7\u9ed8\u8ba4\u4e3a8000\uff09\uff1b\u540e\u8005\u5728\u672c\u7535\u8111\u8bbf\u95ee\u670d\u52a1\u5668\uff0c\u8bbf\u95ee\u65f6ip\u4e3a127.0.0.1\u3002<\/p>\n<p data-pid=\"WUAJoBQJ\">5\u3001\u89c6\u56fe\u4e0e\u7f51\u5740<\/p>\n<p data-pid=\"gat1zm4f\">views.py\uff1a<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.http import HttpResponse   \r\ndef helloWorld(request):   \r\n    return HttpResponse(\"Hello world! \")  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"cAXQZ9au\">urls.py\uff1a<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.conf.urls import url  \r\nfrom . import view  \r\nurlpatterns = [  \r\n    url(r'^$', view.helloWorld)  \r\n]  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"KtM4b2uy\">\u542f\u52a8\u670d\u52a1\u5668\uff0c\u5e76\u5728\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1a127.0.0.1:8000\u3002<\/p>\n<p data-pid=\"ucKJ46OV\">\u4fee\u6539\u540e\u7684urls.py\uff1a<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.conf.urls import url  \r\nfrom . import view  \r\nurlpatterns = [  \r\n    url(r'^helloWorld$', view.helloWorld)  \r\n]  <\/code><\/pre>\n<\/div>\n<p data-pid=\"BPhv5egQ\">\u542f\u52a8\u670d\u52a1\u5668\uff0c\u5e76\u5728\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1a127.0.0.1:8000\/helloWorld\u3002<\/p>\n<p data-pid=\"6i3EVYSW\">url() \u51fd\u6570\uff1a\u53ef\u4ee5\u63a5\u6536\u56db\u4e2a\u53c2\u6570\uff0c\u5206\u522b\u662f\u4e24\u4e2a\u5fc5\u9009\u53c2\u6570regex\u3001view \u548c\u4e24\u4e2a\u53ef\u9009\u53c2\u6570kwargs\u3001name\uff1a<\/p>\n<p data-pid=\"95eiIncl\">\u2460\u3000regex\uff1a\u6b63\u5219\u8868\u8fbe\u5f0f\uff0c\u4e0e\u4e4b\u5339\u914d\u7684 URL \u4f1a\u6267\u884c\u5bf9\u5e94\u7684\u7b2c\u4e8c\u4e2a\u53c2\u6570 view\u3002<\/p>\n<p data-pid=\"hlca90sT\">\u2461\u3000view\uff1a\u7528\u4e8e\u6267\u884c\u4e0e\u6b63\u5219\u8868\u8fbe\u5f0f\u5339\u914d\u7684 URL \u8bf7\u6c42\u3002<\/p>\n<p data-pid=\"PT9ZSC8P\">\u2462\u3000kwargs\uff1a\u89c6\u56fe\u4f7f\u7528\u7684\u5b57\u5178\u7c7b\u578b\u7684\u53c2\u6570\u3002<\/p>\n<p data-pid=\"DDY4xFga\">\u2463\u3000name\uff1a\u7528\u6765\u53cd\u5411\u83b7\u53d6 URL\u3002<\/p>\n<p data-pid=\"iA8tcxc_\">6\u3001Django\u6a21\u677f<\/p>\n<p data-pid=\"lgxpQ4Rs\">1) \u5b9e\u4f8b\uff1a<\/p>\n<p data-pid=\"0v3jeh2T\">\u2460\u3000\u5728app\u76ee\u5f55\u4e2d\uff0c\u521b\u5efa templates \u76ee\u5f55\u5e76\u5efa\u7acb helloWorld.html\u6587\u4ef6\uff1a<\/p>\n<ol>\n<li data-pid=\"nDJ_73Qr\">&lt;h1&gt;{{ helloWorld }}&lt;\/h1&gt;<\/li>\n<\/ol>\n<p data-pid=\"NeT07R7o\">\u2461\u3000\u5411Django\u8bf4\u660e\u6a21\u677f\u6587\u4ef6\u7684\u8def\u5f84\uff0c\u4fee\u6539settings.py\u6587\u4ef6\uff0c\u4fee\u6539 TEMPLATES \u4e2d\u7684 DIRS \u4e3a [BASE_DIR+&#8221;\/templates&#8221;,]\u3002<\/p>\n<p data-pid=\"i94BJiIi\">\u2462\u3000\u4fee\u6539views.py\uff1a<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.shortcuts import render  \r\ndef hello(request):  \r\n    context = {}  \r\n    context['helloWorld'] = 'Hello World!'  \r\n    return render(request, 'helloWorld.html', context)  <\/code><\/pre>\n<\/div>\n<p data-pid=\"EDoXNegF\">render\u4f7f\u7528\u4e86\u4e00\u4e2a\u5b57\u5178 context \u4f5c\u4e3a\u53c2\u6570\uff0ccontext \u5b57\u5178\u4e2d\u5143\u7d20\u7684\u952e\u503c &#8220;helloWorld&#8221; \u5bf9\u5e94\u4e86\u6a21\u677f\u4e2d\u7684\u53d8\u91cf &#8220;{{ helloWorld }}&#8221;\u3002<\/p>\n<p data-pid=\"7eru1hbL\">\u2463\u3000\u542f\u52a8\u670d\u52a1\u5668\uff0c\u5e76\u5728\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1a127.0.0.1:8000\/helloWorld\u3002<\/p>\n<p data-pid=\"pMHIAgmj\">2) Django \u6a21\u677f\u6807\u7b7e<\/p>\n<p data-pid=\"wodp3-G6\">\u2460\u3000if\/else \u6807\u7b7e<\/p>\n<p data-pid=\"MZS73JNr\">if\/else\u652f\u6301\u5d4c\u5957\uff0c{% if %} \u6807\u7b7e\u63a5\u53d7and\u3001or \u6216not\u5173\u952e\u5b57\u6765\u5bf9\u591a\u4e2a\u53d8\u91cf\u505a\u5224\u65ad\uff0c\u6216\u5bf9\u53d8\u91cf\u53d6\u53cd\u3002<\/p>\n<ol>\n<li data-pid=\"fZvP9XhK\">{%\u00a0<b>if<\/b>\u00a0condition %}<\/li>\n<li data-pid=\"f2wmQTY_\">&#8230;<\/li>\n<li data-pid=\"SumXbotJ\">{% endif %}<\/li>\n<\/ol>\n<p data-pid=\"lLoMSK2R\">\u6216\u8005\uff1a<\/p>\n<ol>\n<li data-pid=\"SnlDytsu\">{%\u00a0<b>if<\/b>\u00a0condition1 %}<\/li>\n<li data-pid=\"4UAgkeru\">&#8230;<\/li>\n<li data-pid=\"7moApi3Y\">{%\u00a0<b>elif<\/b>\u00a0condiiton2 %}<\/li>\n<li data-pid=\"rNzDTfyK\">&#8230;<\/li>\n<li data-pid=\"LWwnU0E8\">{%\u00a0<b>else<\/b>\u00a0%}<\/li>\n<li data-pid=\"BV_j5vp6\">&#8230;<\/li>\n<li data-pid=\"JkH034Kf\">{% endif %}<\/li>\n<\/ol>\n<p data-pid=\"-Gh7Rc_M\">\u2461\u3000for \u6807\u7b7e<\/p>\n<p data-pid=\"qnTCfHGz\">{% for %} \u5141\u8bb8\u5728\u4e00\u4e2a\u5e8f\u5217\u4e0a\u8fed\u4ee3\u3002\u652f\u6301\u5d4c\u5957\u3002\u6bcf\u4e00\u6b21\u5faa\u73af\u4e2d\uff0c\u6a21\u677f\u7cfb\u7edf\u4f1a\u6e32\u67d3\u5728 {% for %} \u548c {% endfor %} \u4e4b\u95f4\u7684\u6240\u6709\u5185\u5bb9\u3002<\/p>\n<ol>\n<li data-pid=\"tinb5Y8C\">&lt;ul&gt;<\/li>\n<li data-pid=\"zAqEC9de\">{%\u00a0<b>for<\/b>\u00a0person\u00a0<b>in<\/b>\u00a0list %}<\/li>\n<li data-pid=\"Ntff_B6-\">&lt;li&gt;{{ person.name }}&lt;\/li&gt;<\/li>\n<li data-pid=\"Pcoz0Gnu\">{% endfor %}<\/li>\n<li data-pid=\"F9bHJkT-\">&lt;\/ul&gt;<\/li>\n<\/ol>\n<p data-pid=\"bXjJ6vIg\">\u7ed9\u6807\u7b7e\u589e\u52a0\u4e00\u4e2a reversed \u4f7f\u5f97\u8be5\u5217\u8868\u88ab\u53cd\u5411\u8fed\u4ee3\uff1a<\/p>\n<ol>\n<li data-pid=\"HMWPkNQe\">{%\u00a0<b>for<\/b>\u00a0person\u00a0<b>in<\/b>\u00a0list %}<\/li>\n<li data-pid=\"h7OL_edH\">&#8230;<\/li>\n<li data-pid=\"34wN5bfy\">{% endfor %}<\/li>\n<\/ol>\n<p data-pid=\"fNZjRBZX\">\u2462\u3000ifequal\/ifnotequal \u6807\u7b7e<\/p>\n<p data-pid=\"5pry_QW0\">{% ifequal %} \u6807\u7b7e\u6bd4\u8f83\u4e24\u4e2a\u503c\uff0c\u5f53\u4ed6\u4eec\u76f8\u7b49\u65f6\uff0c\u663e\u793a\u5728 {% ifequal %} \u548c {% endifequal %} \u4e4b\u4e2d\u6240\u6709\u7684\u503c\u3002\u548c {% if %} \u7c7b\u4f3c\uff0c {% ifequal %} \u652f\u6301\u53ef\u9009\u7684 {% else%} \u6807\u7b7e\u3002<\/p>\n<ol>\n<li data-pid=\"JBRwh2mN\">{% ifequal person1 person2 %}<\/li>\n<li data-pid=\"cRPqTk7i\">&lt;h1&gt;YES&lt;\/h1&gt;<\/li>\n<li data-pid=\"iFYdpIDe\">{% endifequal %}<\/li>\n<\/ol>\n<p data-pid=\"lvQUoa9-\">\u2463\u3000\u6ce8\u91ca\u6807\u7b7e<\/p>\n<p data-pid=\"EV6KpcWi\">Django \u6ce8\u91ca\u4f7f\u7528 {# #}\u3002<\/p>\n<p data-pid=\"csevJZxf\">\u2464\u3000\u8fc7\u6ee4\u5668<\/p>\n<p data-pid=\"N8wpCXWi\">\u6a21\u677f\u8fc7\u6ee4\u5668\u53ef\u4ee5\u5728\u53d8\u91cf\u88ab\u663e\u793a\u524d\u4fee\u6539\u5b83\uff0c\u8fc7\u6ee4\u5668\u4f7f\u7528\u7ba1\u9053\u5b57\u7b26\uff1a<\/p>\n<p data-pid=\"rx78WXlw\">{{ name|lower }}\u5927\u5199\u8f6c\u6362\u4e3a\u5c0f\u5199\u3002<\/p>\n<p data-pid=\"5VQsm-dJ\">\u4e00\u4e2a\u8fc7\u6ee4\u5668\u7ba1\u9053\u7684\u8f93\u51fa\u53c8\u53ef\u4ee5\u4f5c\u4e3a\u4e0b\u4e00\u4e2a\u7ba1\u9053\u7684\u8f93\u5165\uff1a<\/p>\n<p data-pid=\"qiBjoA7N\">{{ name|first|upper }}\u5c06\u7b2c\u4e00\u4e2a\u5143\u7d20\u8f6c\u5316\u4e3a\u5927\u5199\u3002<\/p>\n<p data-pid=\"nCi4qlyW\">\u6709\u4e9b\u8fc7\u6ee4\u5668\u6709\u53c2\u6570\uff0c\u8fc7\u6ee4\u5668\u7684\u53c2\u6570\u8ddf\u968f\u5192\u53f7\u4e4b\u540e\u5e76\u603b\u662f\u4ee5\u53cc\u5f15\u53f7\u5305\u542b\uff1a<\/p>\n<p data-pid=\"cadVDO_o\">{{ name|truncatewords:&#8221;3&#8243; }}\u663e\u793a\u53d8\u91cf\u7684\u524d3\u4e2a\u8bcd\u3002<\/p>\n<p data-pid=\"xd4YlzIR\">addslashes\uff1a\u6dfb\u52a0\u53cd\u659c\u6760\u5230\u4efb\u4f55\u53cd\u659c\u6760\u3001\u5355\u5f15\u53f7\u6216\u8005\u53cc\u5f15\u53f7\u524d\u9762\u3002<\/p>\n<p data-pid=\"9mC68H9Q\">date\uff1a\u6309\u6307\u5b9a\u7684\u683c\u5f0f\u5b57\u7b26\u4e32\u53c2\u6570\u683c\u5f0f\u5316date\u6216datetime\u5bf9\u8c61\uff0c\u5982{{ pub_date|date:&#8221;F j, Y&#8221; }}\u3002<\/p>\n<p data-pid=\"flmeS6Bb\">length\uff1a\u8fd4\u56de\u53d8\u91cf\u7684\u957f\u5ea6\u3002<\/p>\n<p data-pid=\"w-NCfVor\">\u2465\u3000include \u6807\u7b7e<\/p>\n<p data-pid=\"FOOQS2k9\">{% include %} \u6807\u7b7e\u5141\u8bb8\u5728\u6a21\u677f\u4e2d\u5305\u542b\u5176\u5b83\u7684\u6a21\u677f\u7684\u5185\u5bb9\u3002<\/p>\n<ol>\n<li data-pid=\"w-f8qv0U\">{% include &#8220;test.html&#8221; %}<\/li>\n<\/ol>\n<p data-pid=\"ROFji3_-\">7\u3001Django\u6a21\u578b<\/p>\n<p data-pid=\"ZkNb_hXo\">Django \u5bf9\u5404\u79cd\u6570\u636e\u5e93\u63d0\u4f9b\u4e86\u5f88\u597d\u7684\u652f\u6301\uff0cDjango \u4e3a\u6570\u636e\u5e93\u63d0\u4f9b\u4e86\u7edf\u4e00\u7684\u8c03\u7528API\uff0c\u53ef\u4ee5\u6839\u636e\u4e1a\u52a1\u9700\u6c42\u9009\u62e9\u4e0d\u540c\u7684\u6570\u636e\u5e93\u3002<\/p>\n<p data-pid=\"x5bncfL4\">\u4ee5MYSQL\u6570\u636e\u5e93\u4e3a\u4f8b\uff0c\u5b89\u88c5 mysql \u9a71\u52a8\u7684\u547d\u4ee4\uff1asudo pip install mysqlclient\u3002<\/p>\n<p data-pid=\"b-iHrqAy\">1) \u6570\u636e\u5e93\u914d\u7f6e<\/p>\n<p data-pid=\"IW3h2Ytn\">\u5728\u9879\u76ee\u7684settings.py\u6587\u4ef6\u4e2d\u627e\u5230 DATABASES \u914d\u7f6e\u9879\uff0c\u5c06\u5176\u4fe1\u606f\u4fee\u6539\u4e3a\uff1a<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">DATABASES = {  \r\n    'default': {  \r\n        'ENGINE': 'django.db.backends.mysql', # \u6216\u8005\u4f7f\u7528 mysql.connector.django  \r\n        'NAME': 'test',  \r\n        'USER': 'test',  \r\n        'PASSWORD': 'test123',  \r\n        'HOST':'localhost',  \r\n        'PORT':'3306',  \r\n    }  \r\n}  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"vOKRWLwb\">\u8fd9\u91cc\u6dfb\u52a0\u4e86\u4e2d\u6587\u6ce8\u91ca\uff0c\u6240\u4ee5\u9700\u8981\u5728settings.py \u6587\u4ef6\u5934\u90e8\u6dfb\u52a0 # -*- coding: UTF-8 -*-\u3002<\/p>\n<p data-pid=\"CPiF4fAM\">2) \u5b9a\u4e49\u6a21\u578b<\/p>\n<p data-pid=\"Po-Av0Bb\">\u2460\u3000\u521b\u5efaAPP\uff1a<\/p>\n<p data-pid=\"EIfYE8ld\">Django\u89c4\u5b9a\uff0c\u5982\u679c\u8981\u4f7f\u7528\u6a21\u578b\uff0c\u5fc5\u987b\u8981\u521b\u5efa\u4e00\u4e2aapp\uff0c\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u521b\u5efa\u4e00\u4e2aapp\uff1apython manage.py startapp TestModel\u3002<\/p>\n<p data-pid=\"9TOUY6bW\">\u2461\u3000\u4fee\u6539 TestModel\/models.py \u6587\u4ef6\uff1a<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.db import models  \r\nclass Test(models.Model):  \r\n    name = models.CharField(max_length=20)  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"62YFgmfD\">\u7c7b\u540d\u4ee3\u8868\u4e86\u6570\u636e\u5e93\u8868\u540d\uff0c\u4e14\u7ee7\u627f\u4e86models.Model\uff0c\u7c7b\u91cc\u9762\u7684\u5b57\u6bb5\u4ee3\u8868\u6570\u636e\u8868\u4e2d\u7684\u5b57\u6bb5(name)\uff0c\u6570\u636e\u7c7b\u578b\u5219\u7531CharField\uff08\u76f8\u5f53\u4e8evarchar\uff09\u3001DateField\uff08\u76f8\u5f53\u4e8edatetime\uff09\uff0c max_length \u53c2\u6570\u9650\u5b9a\u957f\u5ea6\u3002<\/p>\n<p data-pid=\"eIuQXr6d\">\u2462\u3000\u5728settings.py\u4e2d\u627e\u5230INSTALLED_APPS\u8fd9\u4e00\u9879\uff0c\u6dfb\u52a0\uff1a&#8217;TestModel&#8217;\u3002<\/p>\n<p data-pid=\"Uc0IimPL\">\u2463\u3000\u5728\u547d\u4ee4\u884c\u4e2d\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u521b\u5efa\u6570\u636e\u8868\uff0c\u8868\u540d\u4e3a\u5e94\u7528\u540d_\u7c7b\u540d\uff08\u5982\uff1aTestModel_test\uff09\uff1a<\/p>\n<p data-pid=\"bM35nH6R\">view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">python manage.py migrate   # \u521b\u5efa\u8868\u7ed3\u6784  \r\npython manage.py makemigrations TestModel  # \u8ba9Django\u77e5\u9053\u6a21\u578b\u6709\u4e00\u4e9b\u53d8\u66f4  \r\npython manage.py migrate TestModel   # \u521b\u5efa\u8868\u7ed3\u6784  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"LsUN1aNN\">3) \u6570\u636e\u5e93\u64cd\u4f5c<\/p>\n<p data-pid=\"tL1j5HBf\">\u6dfb\u52a0database.py\u6587\u4ef6\uff1a<\/p>\n<p data-pid=\"ZTnqxtDF\">[python] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.http import HttpResponse  \r\nfrom TestModel.models import Test  \r\ndef database(request):  \r\n    test = Test(name='Alice')  \r\n    test.save()  \r\n    return HttpResponse(\"&lt;p&gt;\u6570\u636e\u6dfb\u52a0\u6210\u529f\uff01&lt;\/p&gt;\")  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"urL5-kRx\">\u4fee\u6539 urls.py\uff1a<\/p>\n<p data-pid=\"aO3JpyYx\">view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.conf.urls import *  \r\nfrom . import view,database  \r\nurlpatterns = [  \r\n    url(r'^hello$', view.hello),  \r\n    url(r'^database$', database.database)  \r\n]  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"2r4XV3wv\">\u542f\u52a8\u670d\u52a1\u5668\uff0c\u5e76\u5728\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1a127.0.0.1:8000\/database\u3002<\/p>\n<p data-pid=\"i2hpjHgp\">\u2460\u3000\u6dfb\u52a0\u6570\u636e<\/p>\n<p data-pid=\"0td-doNS\">[python] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.http import HttpResponse  \r\nfrom TestModel.models import Test  \r\ndef database(request):  \r\n    test = Test(name='Alice')  \r\n    test.save()  \r\n    return HttpResponse(\"&lt;p&gt;\u6570\u636e\u6dfb\u52a0\u6210\u529f\uff01&lt;\/p&gt;\")  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"6Sx20dIE\">\u2461\u3000\u83b7\u53d6\u6570\u636e<\/p>\n<p data-pid=\"YEQwjZ3V\">[python] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.http import HttpResponse  \r\nfrom TestModel.models import Test  \r\ndef database(request):  \r\n    # \u521d\u59cb\u5316  \r\n    response = \"\"  \r\n    response1 = \"\"  \r\n    # \u901a\u8fc7objects\u8fd9\u4e2a\u6a21\u578b\u7ba1\u7406\u5668\u7684all()\u83b7\u5f97\u6240\u6709\u6570\u636e\u884c\uff0c\u76f8\u5f53\u4e8eSQL\u4e2d\u7684SELECT * FROM  \r\n    list = Test.objects.all()  \r\n    # filter\u76f8\u5f53\u4e8eSQL\u4e2d\u7684WHERE\uff0c\u53ef\u8bbe\u7f6e\u6761\u4ef6\u8fc7\u6ee4\u7ed3\u679c  \r\n    response2 = Test.objects.filter(id=1)  \r\n    # \u83b7\u53d6\u5355\u4e2a\u5bf9\u8c61  \r\n    response3 = Test.objects.get(id=1)  \r\n    # \u9650\u5236\u8fd4\u56de\u7684\u6570\u636e\uff0c\u76f8\u5f53\u4e8eSQL\u4e2d\u7684OFFSET 0 LIMIT 2;  \r\n    Test.objects.order_by('name')[0:2]  \r\n    # \u6570\u636e\u6392\u5e8f  \r\n    Test.objects.order_by(\"id\")  \r\n    # \u4e0a\u9762\u7684\u65b9\u6cd5\u53ef\u4ee5\u8fde\u9501\u4f7f\u7528  \r\n    Test.objects.filter(name=\"Alice\").order_by(\"id\")  \r\n    # \u8f93\u51fa\u6240\u6709\u6570\u636e  \r\n    for var in list:  \r\n        response1 += var.name + \" \"  \r\n    response = response1  \r\n    return HttpResponse(\"&lt;p&gt;\" + response + \"&lt;\/p&gt;\")  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"31nmSyUt\">\u2462\u3000\u66f4\u65b0\u6570\u636e<\/p>\n<p data-pid=\"BCuPMrCr\">[python] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.http import HttpResponse  \r\nfrom TestModel.models import Test  \r\ndef database(request):  \r\n    # \u4fee\u6539id=1\u7684name\u5b57\u6bb5\u518dsave\uff0c\u76f8\u5f53\u4e8eSQL\u4e2d\u7684UPDATE  \r\n    test = Test.objects.get(id=1)  \r\n    test.name='Alice'  \r\n    test.save()  \r\n    # \u53e6\u4e00\u79cd\u65b9\u5f0f  \r\n    # Test.objects.filter(id=1).update(name='Alice)  \r\n    # \u4fee\u6539\u6240\u6709\u7684\u5217  \r\n    # Test.objects.all()..update(name='Google')  \r\n    return HttpResponse(\"&lt;p&gt;\u6570\u636e\u4fee\u6539\u6210\u529f&lt;\/p&gt;\")  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"VgAhIGYQ\">\u2463\u3000\u5220\u9664\u6570\u636e<\/p>\n<p data-pid=\"NraqfZKW\">\u5220\u9664\u6570\u636e\u5e93\u4e2d\u7684\u5bf9\u8c61\u53ea\u9700\u8c03\u7528\u8be5\u5bf9\u8c61\u7684delete()\u65b9\u6cd5\u5373\u53ef\uff1a<\/p>\n<p data-pid=\"SSnyBVn8\">[python] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.http import HttpResponse  \r\nfrom TestModel.models import Test  \r\ndef database(request):  \r\n    # \u5220\u9664id=1\u7684\u6570\u636e  \r\n    test = Test.objects.get(id=1)  \r\n    test.delete()  \r\n    # \u53e6\u5916\u4e00\u79cd\u65b9\u5f0f  \r\n    # Test.objects.filter(id=1).delete()  \r\n    # \u5220\u9664\u6240\u6709\u6570\u636e  \r\n    # Test.objects.all().delete()  \r\n    return HttpResponse(\"&lt;p&gt;\u6570\u636e\u5220\u9664\u6210\u529f&lt;\/p&gt;\")  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"_DNm9zVH\">8\u3001Django\u8868\u5355<\/p>\n<p data-pid=\"hjCrfYyW\">1) Get\u65b9\u6cd5<\/p>\n<p data-pid=\"yByUxp4r\">\u2460\u3000\u521b\u5efa\u4e00\u4e2a search.py \u6587\u4ef6\uff0c\u7528\u4e8e\u63a5\u6536\u7528\u6237\u7684\u8bf7\u6c42\uff1a<\/p>\n<p data-pid=\"SAIiuugz\">[python] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.http import HttpResponse  \r\nfrom django.shortcuts import render_to_response  \r\n# \u8868\u5355  \r\ndef search_form(request):  \r\n    return render_to_response('search_form.html')  \r\n    # \u63a5\u6536\u8bf7\u6c42\u6570\u636e  \r\n    def search(request):  \r\n    request.encoding='utf-8'  \r\n    if 'q' in request.GET:  \r\n        message = '\u641c\u7d22\u7684\u5185\u5bb9\u4e3a: ' + request.GET['q'].encode('utf-8')  \r\n    else:  \r\n        message = '\u63d0\u4ea4\u4e86\u7a7a\u8868\u5355'  \r\n    return HttpResponse(message)  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"e4qXkQhG\">\u2461\u3000\u5728templates\u4e2d\u6dfb\u52a0 search_form.html \u8868\u5355\uff1a<\/p>\n<p data-pid=\"9F8D5oQK\">[html] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">&lt;!DOCTYPE html&gt;  \r\n&lt;html&gt;  \r\n    &lt;head&gt;  \r\n        &lt;meta charset=\"utf-8\"&gt;  \r\n        &lt;title&gt;&lt;\/title&gt;  \r\n    &lt;\/head&gt;  \r\n    &lt;body&gt;  \r\n        &lt;form action=\"\/search\" method=\"get\"&gt;  \r\n            &lt;input type=\"text\" name=\"q\"&gt;  \r\n            &lt;input type=\"submit\" value=\"\u641c\u7d22\"&gt;  \r\n        &lt;\/form&gt;  \r\n    &lt;\/body&gt;  \r\n&lt;\/html&gt;   \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"5e43jN0N\">\u2462\u3000\u4fee\u6539urls.py\uff1a<\/p>\n<p data-pid=\"kEIIyVsL\">[python] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.conf.urls import url  \r\nfrom . import view,database,search  \r\nurlpatterns = [  \r\n    url(r'^helloWorld$', view.helloWorld),  \r\n    url(r'^database$', database.database),  \r\n    url(r'^search-form$', search.search_form),  \r\n    url(r'^search$', search.search)  \r\n]  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"qhsZtlMW\">\u2463\u3000\u542f\u52a8\u670d\u52a1\u5668\uff0c\u5e76\u5728\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1a127.0.0.1:8000\/search_form\u3002<\/p>\n<p data-pid=\"C4pTVje3\">2) Post\u65b9\u6cd5<\/p>\n<p data-pid=\"xzf_HJpe\">\u2460\u3000\u5728templates\u4e2d\u6dfb\u52a0 post.html \u8868\u5355\uff1a<\/p>\n<p data-pid=\"iXi7uzzM\">[python] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">&lt;!DOCTYPE html&gt;  \r\n&lt;html&gt;  \r\n    &lt;head&gt;  \r\n        &lt;meta charset=\"utf-8\"&gt;  \r\n        &lt;title&gt;&lt;\/title&gt;  \r\n    &lt;\/head&gt;  \r\n    &lt;body&gt;  \r\n        &lt;form action=\"\/search-post\" method=\"post\"&gt;  \r\n            {% csrf_token %}  \r\n            &lt;input type=\"text\" name=\"q\"&gt;  \r\n            &lt;input type=\"submit\" value=\"\u641c\u7d22\"&gt;  \r\n        &lt;\/form&gt;  \r\n        &lt;p&gt;{{ rlt }}&lt;\/p&gt;  \r\n    &lt;\/body&gt;  \r\n&lt;\/html&gt;  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"-ADBaCyC\">{% csrf_token %}\u6807\u7b7e\uff1acsrf \u5168\u79f0\u662f Cross Site Request Forgery\uff0c\u8fd9\u662fDjango\u63d0\u4f9b\u7684\u9632\u6b62\u4f2a\u88c5\u63d0\u4ea4\u8bf7\u6c42\u7684\u529f\u80fd\u3002POST \u65b9\u6cd5\u63d0\u4ea4\u7684\u8868\u683c\uff0c\u5fc5\u987b\u6709\u6b64\u6807\u7b7e\u3002<\/p>\n<p data-pid=\"Ou86xj6A\">\u2461\u3000\u65b0\u5efa search2.py \u6587\u4ef6\u5e76\u4f7f\u7528 search_post \u51fd\u6570\u6765\u5904\u7406 POST \u8bf7\u6c42\uff1a<\/p>\n<p data-pid=\"gXPz0CP_\">[python] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.shortcuts import render  \r\nfrom django.views.decorators import csrf  \r\n# \u63a5\u6536POST\u8bf7\u6c42\u6570\u636e  \r\ndef search_post(request):  \r\n    ctx ={}  \r\n    if request.POST:  \r\n        ctx['rlt'] = request.POST['q']  \r\n    return render(request, \"post.html\", ctx)  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"H3QLvbvd\">\u2462\u3000\u4fee\u6539urls.py\uff1a<\/p>\n<p data-pid=\"Htu8izpi\">[python] view plain copy<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">from django.conf.urls import url  \r\nfrom . import view,database,search  \r\nurlpatterns = [  \r\n    url(r'^helloWorld$', view.helloWorld),  \r\n    url(r'^database$', database.database),  \r\n    url(r'^search-form$', search.search_form),  \r\n    url(r'^search$', search.search)  \r\n    url(r'^search-post$', search2.search_post)  \r\n]  \r\n<\/code><\/pre>\n<\/div>\n<p data-pid=\"2mfXVONI\">\u2463\u3000\u542f\u52a8\u670d\u52a1\u5668\uff0c\u5e76\u5728\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1a127.0.0.1:8000\/search_post\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1\u3001Django\u7b80\u4ecb Python\u4e0b\u6709\u591a\u6b3e\u4e0d\u540c\u7684 Web \u6846\u67b6\uff0cDjango\u662f\u6700\u6709\u4ee3\u8868\u6027\u7684\u4e00\u79cd\u3002\u8bb8\u591a\u6210\u529f\u7684\u7f51\u7ad9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[94],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.iotot.com\/index.php?rest_route=\/wp\/v2\/posts\/1249"}],"collection":[{"href":"https:\/\/blog.iotot.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.iotot.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.iotot.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.iotot.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1249"}],"version-history":[{"count":1,"href":"https:\/\/blog.iotot.com\/index.php?rest_route=\/wp\/v2\/posts\/1249\/revisions"}],"predecessor-version":[{"id":1250,"href":"https:\/\/blog.iotot.com\/index.php?rest_route=\/wp\/v2\/posts\/1249\/revisions\/1250"}],"wp:attachment":[{"href":"https:\/\/blog.iotot.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.iotot.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.iotot.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}