{"id":504,"date":"2022-09-08T23:11:17","date_gmt":"2023-01-22T15:08:19","guid":{"rendered":"https:\/\/www.silicloud.com\/ja\/blog\/index.php\/2023\/11\/30\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/"},"modified":"2025-08-01T00:06:10","modified_gmt":"2025-07-31T15:06:10","slug":"%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/","title":{"rendered":"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528"},"content":{"rendered":"<p>\u8457\u8005\u306f\u3001\u5bc4\u4ed8\u306e\u4e00\u74b0\u3068\u3057\u3066\u300c\u66f8\u3044\u3066Donate\uff08\u5bc4\u4ed8\uff09\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u300d\u306b\u3088\u308aFree and Open Source Fund\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u3002<\/p>\n<h3>\u306f\u3058\u3081\u306b<\/h3>\n<p>Flask\u306f\u3001\u8efd\u91cf\u306aPython\u306e\u30a6\u30a7\u30d6\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308a\u3001Python\u3067\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u4fbf\u5229\u306a\u30c4\u30fc\u30eb\u3068\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002SQLAlchemy\u306f\u3001\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u52b9\u7387\u7684\u304b\u3064\u9ad8\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3059\u308bSQL\u30c4\u30fc\u30eb\u30ad\u30c3\u30c8\u3067\u3059\u3002SQLite\u3001MySQL\u3001PostgreSQL\u306a\u3069\u3001\u3044\u304f\u3064\u304b\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a8\u30f3\u30b8\u30f3\u3068\u306e\u30a4\u30f3\u30bf\u30e9\u30af\u30b7\u30e7\u30f3\u65b9\u6cd5\u3092\u63d0\u4f9b\u3057\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306eSQL\u6a5f\u80fd\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u306e\u30c4\u30fc\u30eb\u30ad\u30c3\u30c8\u306f\u307e\u305f\u3001\u30b7\u30f3\u30d7\u30eb\u306aPython\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30af\u30a8\u30ea\u3092\u4f5c\u6210\u3057\u3001\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u95a2\u4fc2\u30de\u30c3\u30d1\u30fc\uff08ORM\uff09\u3082\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002Flask-SQLAlchemy\u306f\u3001Flask\u3068SQLAlchemy\u3092\u3088\u308a\u7c21\u5358\u306b\u4f7f\u7528\u3059\u308b\u305f\u3081\u306eFlask\u306e\u62e1\u5f35\u6a5f\u80fd\u3067\u3042\u308a\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u30a4\u30f3\u30bf\u30e9\u30af\u30b7\u30e7\u30f3\u3092\u884c\u3046\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3068\u30e1\u30bd\u30c3\u30c9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n<p>Flask\u306f\u30011\u3064\u306ePython\u30d5\u30a1\u30a4\u30eb\u3067\u7c21\u5358\u306b\u5c0f\u3055\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u5c0f\u3055\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30fc\u30d6\u30eb\u3001\u6570\u767e\u306e\u30eb\u30fc\u30c8\u3001\u8907\u96d1\u306a\u6a5f\u80fd\u3092\u6301\u3064\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u6210\u9577\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30c9\u30921\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304f\u3068\u3001\u3059\u3050\u306b\u4e71\u96d1\u306b\u306a\u308a\u3001\u7ba1\u7406\u304c\u96e3\u3057\u304f\u306a\u308a\u307e\u3059\u3002Flask\u306f\u3001\u5404\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e3b\u8981\u306a\u30d1\u30fc\u30c4\u3092\u7279\u5b9a\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3068\u30d5\u30a1\u30a4\u30eb\u306b\u5206\u5272\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3092\u6574\u7406\u3059\u308b\u305f\u3081\u306e\u4ed5\u7d44\u307f\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u3088\u308a\u6574\u7406\u3055\u308c\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u305f\u3068\u3048\u3070\u3001\u30bd\u30fc\u30b7\u30e3\u30eb\u30e1\u30c7\u30a3\u30a2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u30eb\u30fc\u30c8\u306froutes.py\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u306b\u3001users\u3068\u3044\u3046\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e2d\u306b\u4fdd\u5b58\u3055\u308c\u308b\u3067\u3057\u3087\u3046\u3002\u305d\u3057\u3066\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30e2\u30c7\u30eb\u306fusers.py\u3068\u3044\u3046\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u3001models\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e2d\u306b\u96c6\u3081\u3089\u308c\u308b\u3067\u3057\u3087\u3046\u3002\u540c\u69d8\u306b\u3001\u6295\u7a3f\u3084\u30d5\u30a9\u30ed\u30ef\u30fc\u3001\u30cf\u30c3\u30b7\u30e5\u30bf\u30b0\u3001\u8cea\u554f\u3001\u56de\u7b54\u3001\u5e83\u544a\u3001\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3001\u652f\u6255\u3044\u306a\u3069\u3001\u5927\u898f\u6a21\u306a\u30bd\u30fc\u30b7\u30e3\u30eb\u30e1\u30c7\u30a3\u30a2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4ed6\u306e\u6a5f\u80fd\u306b\u3082\u540c\u69d8\u306e\u65b9\u6cd5\u3067\u5bfe\u5fdc\u3067\u304d\u307e\u3059\u3002\u3082\u3057\u652f\u6255\u3044\u306e\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u7de8\u96c6\u3057\u305f\u3044\u5834\u5408\u306b\u306f\u3001mysocialapp\/models\/payment.py\u306b\u3042\u308b\u652f\u6255\u3044\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u5909\u66f4\u3057\u3001\u3055\u3089\u306bmysocialapp\/payments\/routes.py\u306b\u3042\u308b\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5404\u90e8\u5206\u306f\u7570\u306a\u308b\u30d5\u30a1\u30a4\u30eb\u3068\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u5206\u3051\u3089\u308c\u3066\u304a\u308a\u3001\u7ba1\u7406\u3057\u3084\u3059\u3044\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u5206\u5272\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u69cb\u9020\u306f\u3001\u65b0\u3057\u3044\u958b\u767a\u8005\u304c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u7406\u89e3\u3057\u3001\u554f\u984c\u3092\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3057\u305f\u308a\u65b0\u6a5f\u80fd\u3092\u8ffd\u52a0\u3057\u305f\u308a\u3059\u308b\u969b\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002<\/p>\n<p>Flask\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u6a5f\u80fd\u3067\u3042\u308b\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u524d\u306e\u4f8b\u3067\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3001\u6295\u7a3f\u7528\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3001\u30d5\u30a9\u30ed\u30ef\u30fc\u7528\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306a\u3069\u3001\u7570\u306a\u308b\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u3066\u5927\u898f\u6a21\u306a\u30bd\u30fc\u30b7\u30e3\u30eb\u30e1\u30c7\u30a3\u30a2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u9020\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001Flask\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30923\u3064\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u69cb\u7bc9\u3057\u307e\u3059\u3002\u30e1\u30a4\u30f3\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306b\u306f\u3001\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u3084\u305d\u306e\u4ed6\u306e\u4e3b\u8981\u306a\u30eb\u30fc\u30c8\u304c\u542b\u307e\u308c\u3066\u304a\u308a\u3001\u30d6\u30ed\u30b0\u8a18\u4e8b\u306e\u7ba1\u7406\u306b\u306f\u300c\u30dd\u30b9\u30c8\u300d\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3001\u8cea\u554f\u3068\u56de\u7b54\u306b\u306f\u300c\u30af\u30a8\u30b9\u30c1\u30e7\u30f3\u300d\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n<h2>\u5fc5\u8981\u6761\u4ef6 (Hitsuy\u014dj\u014dken)<\/h2>\n<ul class=\"post-ul\">\n<li>A local Python 3 programming environment, which you can set up by following the tutorial for your distribution in How To Install and Set Up a Local Programming Environment for Python 3 series. In this tutorial, we\u2019ll call our project directory flask_app.<\/li>\n<li>An understanding of basic Flask concepts, such as routes, view functions, and templates. If you are not familiar with Flask, check out How to Create Your First Web Application Using Flask and Python and How to Use Templates in a Flask Application.<\/li>\n<li>An understanding of basic HTML concepts. You can review our How To Build a Website with HTML tutorial series for background knowledge.<\/li>\n<li>An understanding of basic Flask-SQLAlchemy concepts, such as setting up a database, creating database models, and inserting data into the database. See How to Use Flask-SQLAlchemy to Interact with Databases in a Flask Application for background knowledge.<\/li>\n<\/ul>\n<h2>\u30bf\u30fc\u30b2\u30c3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u69cb\u9020<\/h2>\n<p>\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u7d42\u4e86\u6642\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u69cb\u9020\u3092\u6301\u3064Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u2514\u2500\u2500 flask_app\r\n    \u251c\u2500\u2500 app\r\n    \u2502   \u251c\u2500\u2500 extensions.py\r\n    \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u251c\u2500\u2500 main\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u251c\u2500\u2500 models\r\n    \u2502   \u2502   \u251c\u2500\u2500 post.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 question.py\r\n    \u2502   \u251c\u2500\u2500 posts\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u251c\u2500\u2500 questions\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u2514\u2500\u2500 templates\r\n    \u2502       \u251c\u2500\u2500 base.html\r\n    \u2502       \u251c\u2500\u2500 index.html\r\n    \u2502       \u251c\u2500\u2500 posts\r\n    \u2502       \u2502   \u251c\u2500\u2500 categories.html\r\n    \u2502       \u2502   \u2514\u2500\u2500 index.html\r\n    \u2502       \u2514\u2500\u2500 questions\r\n    \u2502           \u2514\u2500\u2500 index.html\r\n    \u251c\u2500\u2500 app.db\r\n    \u2514\u2500\u2500 config.py\r\n<\/code><\/pre>\n<p>\u3042\u306a\u305f\u306eflask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e2d\u306b\u306f\u3001app.db\u3068\u3044\u3046\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3068config.py\u3068\u3044\u3046Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308a\u307e\u3059\u3002\u30e1\u30a4\u30f3\u306eFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306fapp\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u3042\u308a\u3001\u6b63\u3057\u304f\u52d5\u4f5c\u3059\u308b\u305f\u3081\u306b\u306f__init__.py\u3068\u3044\u3046\u7279\u5225\u306a\u30d5\u30a1\u30a4\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u3057\u3066\u306e\u5f79\u5272\u3092\u679c\u305f\u3057\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u95a2\u6570\u3082\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306e\u3088\u3046\u306b\u65e5\u672c\u8a9e\u3067\u8868\u73fe\u3057\u307e\u3059\uff081\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u307f\uff09\uff1a<br \/>\n\u30a2\u30d7\u30ea\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u4f7f\u7528\u3059\u308bFlask\u306e\u62e1\u5f35\u6a5f\u80fd\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306eextensions.py\u30d5\u30a1\u30a4\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\uff08\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001Flask-SQLAlchemy\u3092\u4f7f\u7528\u3059\u308b\u4f8b\u3067\u3059\uff09\u3002\u307e\u305f\u3001\u4ee5\u4e0b\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3082\u5b58\u5728\u3057\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>main: the main blueprint for main routes, such as the home page.<\/li>\n<li>posts: the posts blueprint for managing blog posts.<\/li>\n<li>questions: the questions blueprint for managing questions and answers.<\/li>\n<li>models: the directory that will contain Flask-SQLAlchemy models.<\/li>\n<li>templates: the templates directory that will contain files for the main blueprint and a directory for each blueprint.<\/li>\n<\/ul>\n<h2>\u30b9\u30c6\u30c3\u30d71 &#8211; Flask\u3068Flask-SQLAlchemy\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h2>\n<p>\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3001\u4eee\u60f3\u74b0\u5883\u3092\u30a2\u30af\u30c6\u30a3\u30d6\u5316\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token builtin class-name\">source<\/span> <mark>my_env<\/mark>\/bin\/activate<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3042\u306a\u305f\u306e\u4eee\u60f3\u74b0\u5883\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u72b6\u614b\u3067\u3001pip\u3092\u4f7f\u3063\u3066Flask\u3068Flask-SQLAlchemy\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\">pip <span class=\"token function\">install<\/span> Flask Flask-SQLAlchemy<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5b8c\u4e86\u3059\u308b\u3068\u3001\u51fa\u529b\u306b\u306f\u6b21\u306e\u3088\u3046\u306a\u884c\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Successfully installed Flask-2.1.2 Flask-SQLAlchemy-2.5.1 Jinja2-3.1.2 MarkupSafe-2.1.1 SQLAlchemy-1.4.39 Werkzeug-2.1.2 click-8.1.3 greenlet-1.1.2 itsdangerous-2.1.2<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001\u5fc5\u8981\u306aPython\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u5f8c\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d72 &#8211; \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210<\/h2>\n<p>\u3053\u306e\u624b\u9806\u3067\u306f\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u3092\u4ed6\u306e\u90e8\u5206\u304b\u3089\u5206\u96e2\u3057\u3001\u8a2d\u5b9a\u306e\u5909\u66f4\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3001\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3001SQLAlchemy\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306eURI\u306a\u3069\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3001config.py\u3068\u3044\u3046\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u306e\u8a2d\u5b9a\u304c\u5165\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> config.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u3001flask_app\/config.py\u3067\u3059\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">import<\/span> os\r\n\r\nbasedir <span class=\"token operator\">=<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>abspath<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>dirname<span class=\"token punctuation\">(<\/span>__file__<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\r\n\r\n\r\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Config<\/span><span class=\"token punctuation\">:<\/span>\r\n    SECRET_KEY <span class=\"token operator\">=<\/span> os<span class=\"token punctuation\">.<\/span>environ<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'SECRET_KEY'<\/span><span class=\"token punctuation\">)<\/span>\r\n    SQLALCHEMY_DATABASE_URI <span class=\"token operator\">=<\/span> os<span class=\"token punctuation\">.<\/span>environ<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'DATABASE_URI'<\/span><span class=\"token punctuation\">)<\/span>\\\r\n        <span class=\"token keyword\">or<\/span> <span class=\"token string\">'sqlite:\/\/\/'<\/span> <span class=\"token operator\">+<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>basedir<span class=\"token punctuation\">,<\/span> <span class=\"token string\">'app.db'<\/span><span class=\"token punctuation\">)<\/span>\r\n    SQLALCHEMY_TRACK_MODIFICATIONS <span class=\"token operator\">=<\/span> <span class=\"token boolean\">False<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u3001os\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6b63\u3057\u304f\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306b\u3001os.path.abspath(os.path.dirname(__file__))\u3092\u4f7f\u3063\u3066\u57fa\u672c\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u78ba\u7acb\u3057\u307e\u3059\u3002<\/p>\n<p>\u30af\u30e9\u30b9\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u3001Config\u3068\u3044\u3046\u30af\u30e9\u30b9\u3092\u4f7f\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u30013\u3064\u306e\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>SECRET_KEY: A long random string used by Flask as a secret key, or a key used to secure the sessions that remember information from one request to another. The user can access the information stored in the session but cannot modify it unless they have the secret key, so you must never allow anyone to access your secret key. See the Flask documentation on sessions for more information. Other Flask extensions often use this secret key to secure data. See Step 3 of How To Use Web Forms in a Flask Application for more information on how to create a secure secret key. When developing your Flask applications, you should set the secret key with an environment variable called SECRET_KEY. To get its value in this config.py file and save it in a class variable called SECRET_KEY, you access the environment variable\u2019s value via the os.environ object using its get() method. (Though you do not need to set a secret key to follow this tutorial, you can review the note at the end of this list for instructions on how to set a secret key.)<\/li>\n<li>SQLALCHEMY_DATABASE_URI: The database URI specifies the database you want to establish a connection with using SQLAlchemy. In this case, you either get it from a DATABASE_URI environment variable or you set a default value. The default URI value here follows the format sqlite:\/\/\/path\/to\/app.db. You use the os.path.join() function to join the base directory you constructed and stored in the basedir variable and the app.db file name. With this, creating a Flask application without setting a DATABASE_URI environment variable will connect to an app.db database file in your flask_app directory by default. The file will be created when you create your database tables. If you\u2019d like to set a database URI for a different SQL engine, see Step 2 of How to Use Flask-SQLAlchemy to Interact with Databases in a Flask Application.<\/li>\n<li>SQLALCHEMY_TRACK_MODIFICATIONS: A configuration to enable or disable tracking modifications of objects. You set it to False to disable tracking and use less memory. For more, you can read the configuration page in the Flask-SQLAlchemy documentation.<\/li>\n<\/ul>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001\u79d8\u5bc6\u30ad\u30fc\u3092\u8a2d\u5b9a\u3057\u306a\u3044\u305f\u3081\u3001\u79d8\u5bc6\u30ad\u30fc\u304c\u5fc5\u8981\u306a\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u307e\u305b\u3093\u3002\u305f\u3060\u3057\u3001\u79d8\u5bc6\u30ad\u30fc\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u6b21\u306e\u3088\u3046\u306b\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff08Windows\u306e\u5834\u5408\u306f\u3001export\u306e\u4ee3\u308f\u308a\u306bset\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\uff09\uff1a<br \/>\nexport SECRET_KEY=&#8221;\u3042\u306a\u305f\u306e\u79d8\u5bc6\u30ad\u30fc&#8221;<\/div>\n<p>\u540c\u69d8\u306b\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306eURI\u3082\u6b21\u306e\u3088\u3046\u306b\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff08Windows\u306e\u5834\u5408\u306f\u3001set\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\uff09\uff1a<br \/>\nexport DATABASE_URI=&#8221;postgresql:\/\/\u30e6\u30fc\u30b6\u30fc\u540d:\u30d1\u30b9\u30ef\u30fc\u30c9@\u30db\u30b9\u30c8:\u30dd\u30fc\u30c8\/\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d&#8221;<\/p>\n<\/div>\n<p>\u3042\u306a\u305f\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u4eca\u8a2d\u5b9a\u3057\u307e\u3057\u305f\u3002\u6b21\u306b\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7570\u306a\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u8868\u3059\u3044\u304f\u3064\u304b\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d73 \u2014 \u30d5\u30e9\u30b9\u30af\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30c8\u30ea\u306e\u4f5c\u6210<\/h2>\n<p>\u3053\u306e\u624b\u9806\u3067\u306f\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8a2d\u5b9a\u3059\u308bPython\u95a2\u6570\u3067\u3059\u3002<\/p>\n<p>\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u3053\u306e\u6642\u70b9\u3067\u306f\u3001\u3042\u306a\u305f\u306eflask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u69cb\u9020\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff08\u4eee\u60f3\u74b0\u5883\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u9664\u304f\uff09\uff1a<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 flask_app\r\n   \u2514\u2500\u2500 config.py\r\n<\/code><\/pre>\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30a2\u30b3\u30fc\u30c9\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u5b58\u5728\u3057\u3001Python\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u3057\u3066\u6271\u308f\u308c\u307e\u3059\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001\u305d\u308c\u3092\u300capp\u300d\u3068\u547c\u3073\u307e\u3059\u304c\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3084\u4ed6\u306e\u4e00\u822c\u7684\u306a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u540d\uff08\u4f8b: src\u3001core\u306a\u3069\uff09\u3067\u3082\u69cb\u3044\u307e\u305b\u3093\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30a2\u30b3\u30fc\u30c9\u3092\u542b\u3080\u30d5\u30a9\u30eb\u30c0\u3092Python\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u5168\u4f53\u3067\u306e\u6b63\u3057\u3044\u30a4\u30f3\u30dd\u30fc\u30c8\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3001\u4fdd\u5b88\u6027\u3092\u9ad8\u3081\u307e\u3059\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092Python\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u3059\u308b\u305f\u3081\u306b\u3001\u5185\u90e8\u306b\u7279\u5225\u306a__init__.py\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u306e__init__.py\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092Python\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u3057\u3066\u30de\u30fc\u30af\u3059\u308b\u5f79\u5272\u3092\u6301\u3061\u307e\u3059\u3002\u3053\u306e__init__.py\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001Flask\u306e\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u306e\u30b3\u30fc\u30c9\u304c\u542b\u307e\u308c\u307e\u3059\u3002\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u306f\u3001Flask\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8a2d\u5b9a\u3057\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u95a2\u6570\u3067\u3042\u308a\u3001\u3059\u3079\u3066\u306eFlask\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u30ea\u30f3\u30af\u3059\u308b\u4e2d\u5fc3\u7684\u306a\u6a5f\u80fd\u3068\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u306f\u3001\u7570\u306a\u308b\u76ee\u7684\u3084\u7570\u306a\u308b\u69cb\u6210\u3067\u7570\u306a\u308bFlask\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u9069\u5207\u306a\u30c6\u30b9\u30c8\u69cb\u6210\u3092\u6301\u3064\u30c6\u30b9\u30c8\u7528\u306eFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306eflask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u3001\u3053\u306e\u65b0\u3057\u3044\u30a2\u30d7\u30ea\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">mkdir<\/span> app<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u305d\u308c\u304b\u3089\u3001\u30a2\u30d7\u30ea\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u65b0\u3057\u3044__init__.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/__init__.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u305d\u308c\u306b\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30a2\u30d7\u30ea\/__init__.py<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> Flask\r\n\r\n<span class=\"token keyword\">from<\/span> config <span class=\"token keyword\">import<\/span> Config\r\n\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">create_app<\/span><span class=\"token punctuation\">(<\/span>config_class<span class=\"token operator\">=<\/span>Config<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    app <span class=\"token operator\">=<\/span> Flask<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span>\r\n    app<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>from_object<span class=\"token punctuation\">(<\/span>config_class<span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token comment\"># Initialize Flask extensions here<\/span>\r\n\r\n    <span class=\"token comment\"># Register blueprints here<\/span>\r\n\r\n    <span class=\"token decorator annotation punctuation\">@app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/test\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">test_page<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n        <span class=\"token keyword\">return<\/span> <span class=\"token string\">'&lt;h1&gt;Testing the Flask Application Factory Pattern&lt;\/h1&gt;'<\/span>\r\n\r\n    <span class=\"token keyword\">return<\/span> app\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002 (Fairu o hozon shite tojiru.)<\/p>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3001Flask\u30d1\u30c3\u30b1\u30fc\u30b8\u304b\u3089Flask\u30af\u30e9\u30b9\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u305d\u3057\u3066\u3001\u524d\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u4f5c\u6210\u3057\u305fflask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306econfig.py\u30d5\u30a1\u30a4\u30eb\u304b\u3089Config\u8a2d\u5b9a\u30af\u30e9\u30b9\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n<p>create_app\uff08\uff09\u95a2\u6570\u306f\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3067\u3059\u3002\u305d\u308c\u306f\u3001\u304a\u306a\u3058\u307f\u306eapp = Flask\uff08__name__\uff09\u306e\u884c\u3092\u4f7f\u7528\u3057\u3066\u3001Flask()\u30af\u30e9\u30b9\u304b\u3089app\u3068\u3044\u3046\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002app.config.from_object\uff08\uff09\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304b\u3089\u8a2d\u5b9a\u5024\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001config_class\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5024\u3092\u6e21\u3059\u3053\u3068\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3057\u307e\u3059\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3068\u3057\u3066Config\u30af\u30e9\u30b9\u3092\u4fdd\u6301\u3057\u307e\u3059\uff09\u3002Flask\u62e1\u5f35\u6a5f\u80fd\u306f\u3001# Flask\u62e1\u5f35\u6a5f\u80fd\u3092\u521d\u671f\u5316\u3059\u308b\u5834\u6240\u306b\u4ee5\u964d\u3057\u3001\u4f5c\u6210\u3057\u305f\u5f8c\u306f\u3001# \u3053\u3053\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30c8\u30ea\u5185\u3067app.route()\u30c7\u30b3\u30ec\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u3066\u30c6\u30b9\u30c8\u30eb\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30c8\u30ea\u5185\u306b\u30eb\u30fc\u30c8\u3092\u767b\u9332\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3059\u305f\u3081\u306e\u30c6\u30b9\u30c8\u30eb\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u306e\u5834\u5408\u3001test_page()\u30d3\u30e5\u30fc\u95a2\u6570\u306fTesting the Flask Application Factory Pattern\u3068\u3044\u3046\u898b\u51fa\u3057\u3092\u8fd4\u3057\u307e\u3059\u3002<\/p>\n<p>\u6700\u5f8c\u306b\u3001create_app() \u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u306f\u3001\u884c return app \u3067\u69cb\u7bc9\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8fd4\u3057\u307e\u3059\u3002<\/p>\n<p>Flask\u306f\u3001\u81ea\u52d5\u7684\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u5185\u306b\u3042\u308bcreate_app()\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3092\u691c\u51fa\u3057\u3001\u305d\u308c\u3092\u4f7f\u7528\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u958b\u767a\u30e2\u30fc\u30c9\u3067Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u74b0\u5883\u5909\u6570\u3092\u6700\u521d\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306e\u4eee\u60f3\u74b0\u5883\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u72b6\u614b\u3067flask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3044\u308b\u5834\u5408\u3001\u30b3\u30a2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u540d\u300capp\u300d\u3092FLASK_APP\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u6307\u5b9a\u3057\u3001\u30d5\u30e9\u30b9\u30b3\u306b\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u306e\u5834\u6240\u3092\u4f1d\u3048\u307e\u3059\u3002\u305d\u3057\u3066\u3001FLASK_ENV\u74b0\u5883\u5909\u6570\u3092development\u306b\u8a2d\u5b9a\u3057\u3066\u3001\u958b\u767a\u30e2\u30fc\u30c9\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u3001\u30c7\u30d0\u30c3\u30ac\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002\u30d5\u30e9\u30b9\u30b3\u30c7\u30d0\u30c3\u30ac\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u300c\u30d5\u30e9\u30b9\u30b3\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u30a8\u30e9\u30fc\u3092\u51e6\u7406\u3059\u308b\u65b9\u6cd5\u300d\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u307e\u305a\u3001create_app() \u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3092\u63a2\u3059\u5834\u6240\u3068\u3057\u3066\u3001\u30a2\u30d7\u30ea\u30d1\u30c3\u30b1\u30fc\u30b8\u3092 Flask \u306b\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\">FLASK_APP<\/span><span class=\"token operator\">=<\/span>app<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3042\u306a\u305f\u306f\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092app.py\u3068\u3044\u30461\u3064\u306ePython\u30d5\u30a1\u30a4\u30eb\u306b\u69cb\u7bc9\u3059\u308b\u3053\u3068\u306b\u6163\u308c\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u305d\u306e\u5834\u5408\u3001\u540c\u3058\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066Flask\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5834\u6240\u3092\u6559\u3048\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u3053\u3067\u306e\u9055\u3044\u306f\u3001\u524d\u8ff0\u306e\u30b3\u30de\u30f3\u30c9\u306e&#8221;app&#8221;\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b3\u30a2\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3042\u308a\u3001__init__.py\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u5834\u6240\u3067\u3059\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u3001FLASK_ENV\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\">FLASK_ENV<\/span><span class=\"token operator\">=<\/span>development<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u305d\u306e\u5f8c\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\">flask run<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u3092\u7a3c\u50cd\u3055\u305b\u305f\u307e\u307e\u3001\u30d6\u30e9\u30a6\u30b6\u3092\u4f7f\u3063\u3066\u4ee5\u4e0b\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>http:\/\/127.0.0.1:5000\/test\/\r\n<\/code><\/pre>\n<p>\u30b5\u30a4\u30c8\u306f\u3001\u300cFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u30d1\u30bf\u30fc\u30f3\u3092\u30c6\u30b9\u30c8\u3057\u3066\u3044\u307e\u3059\u300d\u3068\u3044\u3046\u898b\u51fa\u3057\u3067\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u4eca\u3001\u3042\u306a\u305f\u306fFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002\u6b21\u306b\u3001\u3053\u306e\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3067Flask\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<h2>4\u30b9\u30c6\u30c3\u30d7 \u2014 Flask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e\u4f5c\u6210<\/h2>\n<p>\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e1\u30a4\u30f3\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u7ba1\u7406\u3059\u308b\u30e1\u30a4\u30f3\u30eb\u30fc\u30c8\u306e\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3057\u3001\u305d\u306e\u8a2d\u8a08\u56f3\u3092\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u306b\u767b\u9332\u3057\u307e\u3059\u3002\u30d6\u30ed\u30b0\u6295\u7a3f\u3001\u8cea\u554f\u3001\u56de\u7b54\u305d\u308c\u305e\u308c\u306b\u5225\u306e\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u8a2d\u8a08\u56f3\u306b\u3044\u304f\u3064\u304b\u306e\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u3001\u5404\u30eb\u30fc\u30c8\u306b\u5bfe\u3057\u3066\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3059\u308b\u305f\u3081\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u3053\u306e\u6642\u70b9\u3067\u3001\u3042\u306a\u305f\u306eflask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u69cb\u9020\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff08\u4eee\u60f3\u74b0\u5883\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u9664\u304f\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 flask_app\r\n    \u251c\u2500\u2500 app\r\n    \u2502   \u2514\u2500\u2500 __init__.py\r\n    \u2514\u2500\u2500 config.py\r\n<\/code><\/pre>\n<h3>\u30e1\u30a4\u30f3\u306e\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3057\u3001\u305d\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3059\u308b\u3002<\/h3>\n<p>\u4eca\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e1\u30a4\u30f3\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3057\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002<\/p>\n<p>\u524d\u306e\u624b\u9806\u3067\u958b\u59cb\u3057\u305f\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u3092\u52d5\u304b\u3057\u305f\u307e\u307e\u306b\u3057\u3066\u3001\u65b0\u3057\u3044\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u65b0\u3057\u3044\u30bf\u30fc\u30df\u30ca\u30eb\u3067flask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u306e\u5f8c\u3001app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306bmain\u3068\u3044\u3046\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">mkdir<\/span> app\/main<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6b21\u306b\u3001\u65b0\u3057\u3044main\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u65b0\u3057\u3044__init__.py\u30e1\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/main\/__init__.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3053\u3053\u304c\u3042\u306a\u305f\u306e\u30e1\u30a4\u30f3\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3059\u308b\u5834\u6240\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306e\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30c9\u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u307e\u3059\uff1a<br \/>\n\u300cflask_app\/app\/main\/__init__.py\u300d<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> Blueprint\r\n\r\nbp <span class=\"token operator\">=<\/span> Blueprint<span class=\"token punctuation\">(<\/span><span class=\"token string\">'main'<\/span><span class=\"token punctuation\">,<\/span> __name__<span class=\"token punctuation\">)<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001flask\u30d1\u30c3\u30b1\u30fc\u30b8\u304b\u3089Blueprint\u30af\u30e9\u30b9\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u6b21\u306b\u3001\u3053\u306e\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3001\u540d\u524d\uff08\u3053\u306e\u5834\u5408\u306f\u300cmain\u300d\uff09\u3068\u73fe\u5728\u306ePython\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u540d\u524d\u3092\u4fdd\u6301\u3057\u3066\u3044\u308b__name__\u7279\u6b8a\u5909\u6570\u306e2\u3064\u306e\u5f15\u6570\u3092\u6e21\u3057\u3066\u3001blueprint\u30aa\u30d6\u30b8\u30a7\u30af\u30c8bp\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u4eca\u3001\u3042\u306a\u305f\u306f\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u5f8c\u3067\u30eb\u30fc\u30c8\u3068\u95a2\u6570\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059\u3002\u305d\u308c\u306f\u3001\u4ee5\u524d\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u4f5c\u6210\u3057\u305fcreate_app()\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u4f5c\u6210\u3057\u305fFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u7d44\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u30e1\u30a4\u30f3\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306broutes.py\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001\u30e1\u30a4\u30f3\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e\u30eb\u30fc\u30c8\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002\u65b0\u3057\u3044routes.py\u30d5\u30a1\u30a4\u30eb\u3092\u30e1\u30a4\u30f3\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/main\/routes.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u6b21\u306e\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u3001bp\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30eb\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30fb\u30a2\u30d7\u30ea\/\u30a2\u30d7\u30ea\/\u30e1\u30a4\u30f3\/\u30eb\u30fc\u30c8.py<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>main <span class=\"token keyword\">import<\/span> bp\r\n\r\n\r\n<span class=\"token decorator annotation punctuation\">@bp<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">index<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token keyword\">return<\/span> <span class=\"token string\">'This is The Main Blueprint'<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001\u30e1\u30a4\u30f3\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u304b\u3089bp\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u306e\u30e1\u30a4\u30f3\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306fapp.main\u3092\u4ecb\u3057\u3066\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002\u30a4\u30f3\u30dd\u30fc\u30c8\u306e\u884c\u3067\u306f\u3001app\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3001main\u306f\u30e1\u30a4\u30f3\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30d1\u30c3\u30b1\u30fc\u30b8\u3001\u305d\u3057\u3066bp\u306f\u30e1\u30a4\u30f3\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e __init__.py \u30d5\u30a1\u30a4\u30eb\u3067\u5ba3\u8a00\u3057\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306f\u3001bp\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3001\/\u30eb\u30fc\u30c8\u3068index()\u30d3\u30e5\u30fc\u95a2\u6570\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u53c2\u8003\u3068\u3057\u3066\u3001\u304a\u306a\u3058\u307f\u306eapp.route()\u30c7\u30b3\u30ec\u30fc\u30bf\u3068\u540c\u69d8\u306b\u3001bp.route()\u30c7\u30b3\u30ec\u30fc\u30bf\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u3089\u306e\u30eb\u30fc\u30c8\u3092Flask\u304c\u4f7f\u7528\u3057\u3001\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u304b\u3089\u76f4\u63a5\u30a4\u30f3\u30dd\u30fc\u30c8\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e__init__.py\u30d5\u30a1\u30a4\u30eb\u3067\u3053\u306eroutes.py\u30d5\u30a1\u30a4\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u7de8\u96c6\u3059\u308b\u305f\u3081\u306b\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/main\/__init__.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u306e\u6700\u5f8c\u306b\u3001\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305fimport\u884c\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30a2\u30d7\u30ea\/\u30e1\u30a4\u30f3\/\u30a4\u30cb\u30b7\u30e3\u30eb.py<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> Blueprint\r\n\r\nbp <span class=\"token operator\">=<\/span> Blueprint<span class=\"token punctuation\">(<\/span><span class=\"token string\">'main'<\/span><span class=\"token punctuation\">,<\/span> __name__<span class=\"token punctuation\">)<\/span>\r\n\r\n<mark><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>main <span class=\"token keyword\">import<\/span> routes<\/mark>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u306e\u8ffd\u52a0\u306b\u3088\u308a\u3001\u8a2d\u8a08\u56f3\u306e\u767b\u9332\u6642\u306b\u305d\u306e\u30eb\u30fc\u30c8\u3082\u767b\u9332\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3001\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u305f\u3089\u3001Flask\u306b\u3053\u306e\u65b0\u3057\u3044\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u901a\u77e5\u3057\u3066\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e00\u90e8\u3068\u3057\u3066\u6271\u3048\u308b\u3088\u3046\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u305f\u3081\u306b\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u95a2\u6570\u5185\u3067\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u306e\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u306e\u7de8\u96c6\u3092\u884c\u3046\u305f\u3081\u306b\u3001app\/__init__.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/__init__.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u4ee5\u4e0b\u306e\u30d6\u30ed\u30c3\u30af\u306b\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u3066\u3044\u308b\u884c\u3092\u8ffd\u52a0\u3057\u3001create_app()\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\n<p>flask_app\/app\/main\/__init__.py\u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30e1\u30a4\u30f3\/__init__.py<\/p>\n<\/div>\n<pre class=\"post-pre\"><code><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">create_app<\/span><span class=\"token punctuation\">(<\/span>config_class<span class=\"token operator\">=<\/span>Config<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    app <span class=\"token operator\">=<\/span> Flask<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span>\r\n    app<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>from_object<span class=\"token punctuation\">(<\/span>config_class<span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token comment\"># Initialize Flask extensions here<\/span>\r\n\r\n    <span class=\"token comment\"># Register blueprints here<\/span>\r\n    <mark><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>main <span class=\"token keyword\">import<\/span> bp <span class=\"token keyword\">as<\/span> main_bp<\/mark>\r\n    <mark>app<span class=\"token punctuation\">.<\/span>register_blueprint<span class=\"token punctuation\">(<\/span>main_bp<span class=\"token punctuation\">)<\/span><\/mark>\r\n\r\n    <span class=\"token decorator annotation punctuation\">@app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/test\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">test_page<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n        <span class=\"token keyword\">return<\/span> <span class=\"token string\">'&lt;h1&gt;Testing the Flask Application Factory Pattern&lt;\/h1&gt;'<\/span>\r\n\r\n    <span class=\"token keyword\">return<\/span> app\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30e1\u30a4\u30f3\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u304b\u3089bp\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001\u53ef\u8aad\u6027\u306e\u305f\u3081\u306bmain_bp\u3068\u3044\u3046\u540d\u524d\u306b\u30ea\u30cd\u30fc\u30e0\u3057\u307e\u3059\u3002\u305d\u3057\u3066\u3001app.register_blueprint()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u3001\u3053\u306e\u30e1\u30a4\u30f3\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092Flask\u304c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e00\u90e8\u3068\u3057\u3066\u6271\u3046\u3088\u3046\u306b\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<p>\u958b\u767a\u7528\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3057\u305f\u72b6\u614b\u3067\u3001\u4ee5\u4e0b\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>http:\/\/127.0.0.1:5000\/\r\n<\/code><\/pre>\n<p>\u3053\u306e\u30da\u30fc\u30b8\u306f\u300c\u30e1\u30a4\u30f3\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u300d\u3068\u3044\u3046\u30c6\u30ad\u30b9\u30c8\u3067\u8aad\u307f\u8fbc\u307e\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u30e1\u30a4\u30f3\u30eb\u30fc\u30c8\u3067\u8fd4\u3055\u308c\u308b\u30c6\u30ad\u30b9\u30c8\u3067\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306f\u73fe\u5728\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u306e\u30eb\u30fc\u30c8\u3092\u6301\u3064\u8a2d\u8a08\u56f3\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u6b21\u306b\u3001Flask\u306e\u8a2d\u8a08\u56f3\u3092\u4f7f\u7528\u3057\u3066\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u8868\u793a\u3059\u308b\u305f\u3081\u306e\u30e1\u30a4\u30f3\u30eb\u30fc\u30c8\u3092\u7de8\u96c6\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u65b9\u6cd5\u304c\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u30e1\u30a4\u30f3\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306eroutes.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/main\/routes.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u306e\u3042\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\n<p>flask_app\/app\/main\/routes.py\u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a<\/p>\n<p>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/app\/main\/routes.py<\/p>\n<\/div>\n<pre class=\"post-pre\"><code><mark><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> render_template<\/mark>\r\n<span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>main <span class=\"token keyword\">import<\/span> bp\r\n\r\n<span class=\"token decorator annotation punctuation\">@bp<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">index<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token keyword\">return<\/span> <mark>render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">'index.html'<\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001render_template\uff08\uff09\u95a2\u6570\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001\u305d\u308c\u3092\u4f7f\u7528\u3057\u3066index.html\u3068\u3044\u3046\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u63cf\u753b\u3059\u308b\u305f\u3081\u306e\u30eb\u30fc\u30c8\u3067\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<p>\u4eca\u5f8c\u306f\u3001\u30b3\u30fc\u30c9\u306e\u7e70\u308a\u8fd4\u3057\u3092\u907f\u3051\u308b\u305f\u3081\u306b\u3001\u4ed6\u306e\u3059\u3079\u3066\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u5171\u6709\u3055\u308c\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3068\u57fa\u672c\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002 (Apuri direkutori ni tenpureto direkutori o sakusei shite kudasai.)<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">mkdir<\/span> app\/templates<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001base.html\u3068\u3044\u3046\u540d\u524d\u3067\u30d9\u30fc\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3068\u3057\u3066\u958b\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/templates\/base.html<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u306b\u6b21\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3067\u3001\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u81ea\u7136\u306a\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u307e\u3059\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token doctype\"><span class=\"token punctuation\">&lt;!<\/span><span class=\"token doctype-tag\">DOCTYPE<\/span> <span class=\"token name\">html<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>html<\/span> <span class=\"token attr-name\">lang<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>en<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>head<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>meta<\/span> <span class=\"token attr-name\">charset<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>UTF-8<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>title<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{% block title %} {% endblock %} - FlaskApp<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>title<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>style<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token style\"><span class=\"token language-css\">\r\n        <span class=\"token selector\">h2<\/span> <span class=\"token punctuation\">{<\/span>\r\n            <span class=\"token property\">width<\/span><span class=\"token punctuation\">:<\/span> 100%<span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token punctuation\">}<\/span>\r\n\r\n        <span class=\"token selector\">.title<\/span> <span class=\"token punctuation\">{<\/span>\r\n            <span class=\"token property\">margin<\/span><span class=\"token punctuation\">:<\/span> 5px<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">width<\/span><span class=\"token punctuation\">:<\/span> 100%<span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token punctuation\">}<\/span>\r\n\r\n        <span class=\"token selector\">.content<\/span> <span class=\"token punctuation\">{<\/span>\r\n            <span class=\"token property\">margin<\/span><span class=\"token punctuation\">:<\/span> 5px<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">width<\/span><span class=\"token punctuation\">:<\/span> 100%<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">flex-direction<\/span><span class=\"token punctuation\">:<\/span> row<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">flex-wrap<\/span><span class=\"token punctuation\">:<\/span> wrap<span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token punctuation\">}<\/span>\r\n\r\n        <span class=\"token selector\">.post<\/span> <span class=\"token punctuation\">{<\/span>\r\n            <span class=\"token property\">flex<\/span><span class=\"token punctuation\">:<\/span> 20%<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 10px<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">margin<\/span><span class=\"token punctuation\">:<\/span> 5px<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">background-color<\/span><span class=\"token punctuation\">:<\/span> #f3f3f3<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">inline-size<\/span><span class=\"token punctuation\">:<\/span> 100%<span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token punctuation\">}<\/span>\r\n\r\n        <span class=\"token selector\">.title a<\/span> <span class=\"token punctuation\">{<\/span>\r\n            <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> #00a36f<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">text-decoration<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token punctuation\">}<\/span>\r\n\r\n        <span class=\"token selector\">nav a<\/span> <span class=\"token punctuation\">{<\/span>\r\n            <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> #d64161<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 3em<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">margin-left<\/span><span class=\"token punctuation\">:<\/span> 50px<span class=\"token punctuation\">;<\/span>\r\n            <span class=\"token property\">text-decoration<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token punctuation\">}<\/span>\r\n\r\n    <\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>style<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>head<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>body<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>nav<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>{{ url_for('main.index') }}<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>FlaskApp<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>#<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Posts<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>#<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Categories<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>#<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Questions<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>nav<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>hr<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>content<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        {% block content %} {% endblock %}\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>body<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>html<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u3053\u306e\u30d9\u30fc\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u306f\u3001\u4ed6\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u3082\u518d\u5229\u7528\u3059\u308bHTML\u306e\u96db\u5f62\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u30d9\u30fc\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u306f\u3001\u30bf\u30a4\u30c8\u30eb\u30d6\u30ed\u30c3\u30af\u3001\u3044\u304f\u3064\u304b\u306eCSS\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7570\u306a\u308b\u90e8\u5206\u3078\u306e\u30ea\u30f3\u30af\u3092\u63d0\u4f9b\u3059\u308b\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30d0\u30fc\u3001\u305d\u3057\u3066\u30b3\u30f3\u30c6\u30f3\u30c4\u30d6\u30ed\u30c3\u30af\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u30d9\u30fc\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u300cFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5\u300d\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>url_for()\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u30eb\u30fc\u30c8\u306b\u30ea\u30f3\u30af\u3059\u308b\u969b\u306b\u306f\u3001\u69cb\u6587blueprint_name.view_function_name\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u306f\u30e1\u30a4\u30f3\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u5185\u306eindex()\u30d3\u30e5\u30fc\u95a2\u6570\u3067\u51e6\u7406\u3055\u308c\u308b\u305f\u3081\u3001\u30ea\u30f3\u30af\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306burl_for()\u95a2\u6570\u306bmain.index\u3092\u6e21\u3057\u307e\u3059\u3002<\/p>\n<p>\u4eca\u3001\u30e1\u30a4\u30f3\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e index() \u30d3\u30e5\u30fc\u95a2\u6570\u3067\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u305f index.html \u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/templates\/index.html<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u65b0\u3057\u304f\u4f5c\u6210\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u6b21\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\/\u30a4\u30f3\u30c7\u30c3\u30af\u30b9.html<\/div>\n<pre class=\"post-pre\"><code>{% extends 'base.html' %}\r\n\r\n{% block content %}\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>span<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>title<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{% block title %} The Home Page of FlaskApp {% endblock %}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>span<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>content<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>This is the main Flask blueprint<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n{% endblock %}\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002 (Fairu o hozon shite tojiru)<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001\u30d9\u30fc\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u62e1\u5f35\u3057\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30f3\u30c4\u30d6\u30ed\u30c3\u30af\u3092\u7f6e\u304d\u63db\u3048\u3001<\/p>\n<h1>\u898b\u51fa\u3057\u3092\u30bf\u30a4\u30c8\u30eb\u3068\u3057\u3066\u4f7f\u7528\u3057\u3001<\/h1>\n<h2>\u898b\u51fa\u3057\u3092\u4f7f\u7528\u3057\u3066\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u304c\u30e1\u30a4\u30f3\u306eFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e\u4e00\u90e8\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002<\/h2>\n<p>\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u3092\u7a3c\u50cd\u3055\u305b\u305f\u72b6\u614b\u3067\u3001\u30d6\u30e9\u30a6\u30b6\u3067\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u304b\u3001\u65e2\u306b\u958b\u3044\u3066\u3044\u308b\u5834\u5408\u306f\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>http:\/\/127.0.0.1:5000\/\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u306e\u753b\u50cf\u3068\u4f3c\u305f\u3088\u3046\u306a\u30da\u30fc\u30b8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65645eb3daa94e2bdf7b27c6\/142-0.png\" alt=\"Main Blueprint\" \/><\/div>\n<p>\u4eca\u3001\u3042\u306a\u305f\u306f\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u8a2d\u5b9a\u3057\u3001\u305d\u306eroutes.py\u30d5\u30a1\u30a4\u30eb\u306b\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u767b\u9332\u3057\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u63cf\u753b\u3057\u307e\u3057\u305f\u3002\u6b21\u306b\u3001\u30d6\u30ed\u30b0\u8a18\u4e8b\u7528\u306e\u5225\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<h3>\u6295\u7a3f\u306e\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3057\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3059\u308b\u3002<\/h3>\n<p>\u4eca\u3001\u30d6\u30ed\u30b0\u8a18\u4e8b\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3001\u767b\u9332\u3057\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002<\/p>\n<p>\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u3053\u306e\u6642\u70b9\u3067\u306f\u3001\u3042\u306a\u305f\u306eflask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff08\u4eee\u60f3\u74b0\u5883\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u9664\u304f\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 flask_app\r\n    \u251c\u2500\u2500 app\r\n    \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u251c\u2500\u2500 main\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u2514\u2500\u2500 templates\r\n    \u2502       \u251c\u2500\u2500 base.html\r\n    \u2502       \u2514\u2500\u2500 index.html\r\n    \u2514\u2500\u2500 config.py\r\n<\/code><\/pre>\n<p>\u4ee5\u524d\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3068\u540c\u3058\u624b\u9806\u306b\u5f93\u3063\u3066\u3001\u30d6\u30ed\u30b0\u6295\u7a3f\u306e\u65b0\u3057\u3044\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u6700\u521d\u306b\u3001\u9752\u5199\u771f\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u6301\u3059\u308b\u65b0\u3057\u3044\u6295\u7a3f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002 (Saisho ni, aoshirazu no fairu wo jizishu suru atarashii toukou directory wo sakusei shite kudasai.)<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">mkdir<\/span> app\/posts<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6b21\u306b\u3001\u65b0\u3057\u3044\u300c__init__.py\u300d\u30d5\u30a1\u30a4\u30eb\u3092\u65b0\u3057\u3044\u6295\u7a3f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e2d\u306b\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/posts\/__init__.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>BP\u306e\u8a2d\u8a08\u56f3\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3001\u4f5c\u6210\u3059\u308b\u30eb\u30fc\u30c8\u3092\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306eroutes.py\u30d5\u30a1\u30a4\u30eb\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\/\u6295\u7a3f\/\u30a4\u30cb\u30b7\u30e3\u30e9\u30a4\u30ba\u30d5\u30a1\u30a4\u30eb<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> Blueprint\r\n\r\nbp <span class=\"token operator\">=<\/span> Blueprint<span class=\"token punctuation\">(<\/span><span class=\"token string\">'posts'<\/span><span class=\"token punctuation\">,<\/span> __name__<span class=\"token punctuation\">)<\/span>\r\n\r\n\r\n<span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>posts <span class=\"token keyword\">import<\/span> routes\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u524d\u306e\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u3067\u306f\u3001\u9752\u5199\u771f\u306e\u540d\u524d\u3068\u3057\u3066\u300cposts\u300d\u3068\u3044\u3046\u540d\u524d\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u307e\u3060\u4f5c\u6210\u3057\u3066\u3044\u306a\u3044\u300croutes.py\u300d\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30eb\u30fc\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u65b0\u3057\u3044routes.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304d\u307e\u3059\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u6295\u7a3f\u306e\u30eb\u30fc\u30c8\u3092\u8a18\u8ff0\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/posts\/routes.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u6b21\u306e\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306e\u6587\u3092\u65e5\u672c\u8a9e\u3067\u81ea\u7136\u306b\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u69cb\u3044\u307e\u305b\u3093\uff1a<br \/>\n\u300cflask_app\/app\/posts\/routes.py\u300d<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> render_template\r\n<span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>posts <span class=\"token keyword\">import<\/span> bp\r\n\r\n<span class=\"token decorator annotation punctuation\">@bp<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">index<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">'posts\/index.html'<\/span><span class=\"token punctuation\">)<\/span>\r\n\r\n<span class=\"token decorator annotation punctuation\">@bp<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/categories\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">categories<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">'posts\/categories.html'<\/span><span class=\"token punctuation\">)<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u30012\u3064\u306e\u30eb\u30fc\u30c8\u304c\u3042\u308a\u307e\u3059\u30021\u3064\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6295\u7a3f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u306e\u305f\u3081\u306e\u30eb\u30fc\u30c8\u3067\u3001\u3082\u30461\u3064\u306f\u6295\u7a3f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u542b\u307e\u308c\u308b\u30ab\u30c6\u30b4\u30ea\u306e\u305f\u3081\u306e\u30eb\u30fc\u30c8\u3067\u3059\u3002<\/p>\n<p>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30eb\u30fc\u30c8\u3067\u306f\u3001\u30d1\u30b9\u304c\u300cposts\/index.html\u300d\u3068\u306a\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001Flask\u304c\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306bposts\u3068\u3044\u3046\u540d\u524d\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u63a2\u3057\u3001\u305d\u306e\u4e2d\u306b\u3042\u308bindex.html\u30d5\u30a1\u30a4\u30eb\u3092\u63a2\u3059\u3068\u3044\u3046\u610f\u5473\u3067\u3059\u3002<\/p>\n<p>\u30ab\u30c6\u30b4\u30ea\u30fc\u30eb\u30fc\u30c8\u3067\u306f\u3001categories.html\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u5185\u306eposts\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u3001\u65b0\u3057\u3044\u6295\u7a3f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">mkdir<\/span> app\/templates\/posts<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6b21\u306b\u3001\u30dd\u30b9\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u65b0\u3057\u3044index.html\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30dd\u30b9\u30c8\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306eindex()\u30d3\u30e5\u30fc\u95a2\u6570\u3067\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/templates\/posts\/index.html<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u65b0\u3057\u304f\u4f5c\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\/\u6295\u7a3f\/\u30a4\u30f3\u30c7\u30c3\u30af\u30b9.html<\/div>\n<pre class=\"post-pre\"><code>{% extends 'base.html' %}\r\n\r\n{% block content %}\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>span<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>title<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{% block title %} The Posts Page {% endblock %}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>span<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>content<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>This is the posts Flask blueprint<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n{% endblock %}\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u3053\u3053\u3067\u57fa\u672c\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u62e1\u5f35\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u30bf\u30a4\u30c8\u30eb\u3068\u3057\u3066<\/p>\n<h1>\u898b\u51fa\u3057\u3068\u3001\u6295\u7a3f\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e\u4e00\u90e8\u3068\u3057\u3066\u30da\u30fc\u30b8\u3092\u30de\u30fc\u30af\u3059\u308b\u305f\u3081\u306e<\/h1>\n<h2>\u898b\u51fa\u3057\u3082\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/h2>\n<p>\u6b21\u306b\u3001posts\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u65b0\u3057\u3044categories.html\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001posts\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306ecategories()\u30d3\u30e5\u30fc\u95a2\u6570\u3067\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/templates\/posts\/categories.html<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u65b0\u3057\u304f\u4f5c\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\n<p>\u4ee5\u4e0b\u306f\u3001\u65e5\u672c\u8a9e\u306b\u30cd\u30a4\u30c6\u30a3\u30d6\u306a\u5f62\u3067\u8a00\u3044\u63db\u3048\u3089\u308c\u305f\u3082\u306e\u3067\u3059\u3002<\/p>\n<p>flask_app\/app\/templates\/posts\/categories.html -&gt; flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\/posts\/categories.html<\/p>\n<\/div>\n<pre class=\"post-pre\"><code>{% extends 'base.html' %}\r\n\r\n{% block content %}\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>span<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>title<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{% block title %} Categories {% endblock %}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>span<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>content<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>This is the categories page within the posts blueprint<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n{% endblock %}\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3001\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30d9\u30fc\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u62e1\u5f35\u3057\u3001<\/p>\n<h1>\u898b\u51fa\u3057\u3092\u30bf\u30a4\u30c8\u30eb\u3068\u3057\u3066\u3001<\/h1>\n<h2>\u898b\u51fa\u3057\u3092\u6295\u7a3f\u306e\u8a2d\u8a08\u56f3\u306e\u4e00\u90e8\u3068\u3057\u3066\u30da\u30fc\u30b8\u306b\u4ed8\u3051\u307e\u3059\u3002<\/h2>\n<p>\u8a18\u4e8b\u306e\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3057\u3001\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u3001\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u3092Flask\u306e\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u306b\u767b\u9332\u3057\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e00\u90e8\u3068\u3057\u3066\u8a8d\u8b58\u3055\u305b\u307e\u3059\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u306e__init__.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u3001\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u95a2\u6570\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/__init__.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u3001create_app() \u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u95a2\u6570\u3092\u7de8\u96c6\u3057\u307e\u3059\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30a2\u30d7\u30ea\/__init__.py<\/div>\n<pre class=\"post-pre\"><code>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">create_app<\/span><span class=\"token punctuation\">(<\/span>config_class<span class=\"token operator\">=<\/span>Config<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    app <span class=\"token operator\">=<\/span> Flask<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span>\r\n    app<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>from_object<span class=\"token punctuation\">(<\/span>config_class<span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token comment\"># Initialize Flask extensions here<\/span>\r\n\r\n    <span class=\"token comment\"># Register blueprints here<\/span>\r\n    <span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>main <span class=\"token keyword\">import<\/span> bp <span class=\"token keyword\">as<\/span> main_bp\r\n    app<span class=\"token punctuation\">.<\/span>register_blueprint<span class=\"token punctuation\">(<\/span>main_bp<span class=\"token punctuation\">)<\/span>\r\n\r\n    <mark><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>posts <span class=\"token keyword\">import<\/span> bp <span class=\"token keyword\">as<\/span> posts_bp<\/mark>\r\n    <mark>app<span class=\"token punctuation\">.<\/span>register_blueprint<span class=\"token punctuation\">(<\/span>posts_bp<span class=\"token punctuation\">,<\/span> url_prefix<span class=\"token operator\">=<\/span><span class=\"token string\">'\/posts'<\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n\r\n    <span class=\"token decorator annotation punctuation\">@app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/test\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">test_page<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n        <span class=\"token keyword\">return<\/span> <span class=\"token string\">'&lt;h1&gt;Testing the Flask Application Factory Pattern&lt;\/h1&gt;'<\/span>\r\n\r\n    <span class=\"token keyword\">return<\/span> app\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001\u6295\u7a3f\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30d1\u30c3\u30b1\u30fc\u30b8\u304b\u3089bp\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001\u53ef\u8aad\u6027\u306e\u305f\u3081\u306bposts_bp\u3068\u3044\u3046\u540d\u524d\u3092\u4ed8\u3051\u307e\u3057\u305f\u3002<\/p>\n<p>app.register_blueprint()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u3001posts_bp\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6e21\u3059\u3053\u3068\u3067\u3001\u6295\u7a3f\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u767b\u9332\u3057\u307e\u3059\u3002\u307e\u305f\u3001url_prefix\u30d1\u30e9\u30e1\u30fc\u30bf\u306b&#8217;\/posts&#8217;\u306e\u5024\u3092\u6e21\u3059\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u3053\u306e\u6587\u5b57\u5217\u3067\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e\u30eb\u30fc\u30c8\u304c\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3055\u308c\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001posts\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e\u30e1\u30a4\u30f3\u306e\/\u30eb\u30fc\u30c8\u306f\/posts\/\u3092\u4ecb\u3057\u3066\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u3001\/categories\u30eb\u30fc\u30c8\u306f\/posts\/categories\/\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u65b0\u3057\u3044\u6295\u7a3f\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u304c\u767b\u9332\u3055\u308c\u3001\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u304c\u7a3c\u50cd\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u30d6\u30e9\u30a6\u30b6\u3092\u4f7f\u7528\u3057\u3066\u4ee5\u4e0b\u306eURL\u306b\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>http:\/\/127.0.0.1:5000\/posts\/\r\nhttp:\/\/127.0.0.1:5000\/posts\/categories\/\r\n<\/code><\/pre>\n<p>The heading of the &#8220;The Posts Page&#8221; will be displayed when accessing the http:\/\/127.0.0.1:5000\/posts\/ page. On the other hand, the heading of &#8220;Categories&#8221; will be displayed when accessing the http:\/\/127.0.0.1:5000\/posts\/categories\/ page.<\/p>\n<p>\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30d0\u30fc\u306b\u3042\u308b\u300c\u6295\u7a3f\u300d\u3068\u300c\u30ab\u30c6\u30b4\u30ea\u30fc\u300d\u306e\u30ea\u30f3\u30af\u3092\u6a5f\u80fd\u3055\u305b\u308b\u305f\u3081\u306b\u3001\u30d9\u30fc\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u7de8\u96c6\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/templates\/base.html<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u8868\u73fe\u3067\u3001<\/p>\n<nav>\u30bf\u30b0\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\/base.html<\/div>\n<pre class=\"post-pre\"><code>    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>nav<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>{{ url_for('main.index') }}<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>FlaskApp<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span><mark>{{ url_for('posts.index') }}<\/mark><span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Posts<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span><mark>{{ url_for('posts.categories') }}<\/mark><span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Categories<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>#<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Questions<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>nav<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002 (\u30d5\u30a1\u30a4\u30eb\u3092\u307b\u305e\u3093\u3057\u3066\u3068\u3058\u3066\u304f\u3060\u3055\u3044\u3002)<\/p>\n<p>url_for(&#8216;posts.index&#8217;)\u95a2\u6570\u306e\u547c\u3073\u51fa\u3057\u3067\u6295\u7a3f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u30ea\u30f3\u30af\u3057\u3001url_for(&#8216;posts.categories&#8217;)\u3067\u30ab\u30c6\u30b4\u30ea\u30fc\u30da\u30fc\u30b8\u306b\u30ea\u30f3\u30af\u3057\u307e\u3059\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u306e\u3044\u305a\u308c\u304b\u306e\u30da\u30fc\u30b8\u3092\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5\u3057\u3066\u3001[\u6295\u7a3f]\u304a\u3088\u3073[\u30ab\u30c6\u30b4\u30ea]\u30ea\u30f3\u30af\u306e\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u73fe\u5728\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u6295\u7a3f\u306e\u8a2d\u8a08\u56f3\u304c\u767b\u9332\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u6b21\u306b\u3001\u8cea\u554f\u3068\u56de\u7b54\u306e\u305f\u3081\u306e\u8a2d\u8a08\u56f3\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<h3>\u8cea\u554f\u306e\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3057\u3001\u305d\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3059\u308b\u3002<\/h3>\n<p>\u4eca\u3001\u8cea\u554f\u306e\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3057\u3001\u305d\u308c\u3092\u767b\u9332\u3057\u3066\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u6bb5\u968e\u3067\u306f\u3001flask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u69cb\u9020\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff08\u4eee\u60f3\u74b0\u5883\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u9664\u304f\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 flask_app\r\n    \u251c\u2500\u2500 app\r\n    \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u251c\u2500\u2500 main\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u251c\u2500\u2500 posts\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u2514\u2500\u2500 templates\r\n    \u2502       \u251c\u2500\u2500 base.html\r\n    \u2502       \u251c\u2500\u2500 index.html\r\n    \u2502       \u2514\u2500\u2500 posts\r\n    \u2502           \u251c\u2500\u2500 categories.html\r\n    \u2502           \u2514\u2500\u2500 index.html\r\n    \u2514\u2500\u2500 config.py\r\n<\/code><\/pre>\n<p>\u65b0\u3057\u3044\u8cea\u554f\u3068\u56de\u7b54\u306e\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u3001\u8a2d\u8a08\u56f3\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u6301\u3059\u308b\u65b0\u3057\u3044\u8cea\u554f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">mkdir<\/span> app\/questions<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6b21\u306b\u3001\u65b0\u3057\u3044questions\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e2d\u306b\u65b0\u3057\u3044__init__.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/questions\/__init__.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>BP\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3001\u5f8c\u3067\u4f5c\u6210\u3059\u308b\u30eb\u30fc\u30c8\u3092\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306eroutes.py\u30d5\u30a1\u30a4\u30eb\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30a2\u30d7\u30ea\u5185\/\u8cea\u554f\/\u30a4\u30cb\u30b7\u30e3\u30eb\/\u30d4\u30fc\u30ef\u30a4<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> Blueprint\r\n\r\nbp <span class=\"token operator\">=<\/span> Blueprint<span class=\"token punctuation\">(<\/span><span class=\"token string\">'questions'<\/span><span class=\"token punctuation\">,<\/span> __name__<span class=\"token punctuation\">)<\/span>\r\n\r\n<span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>questions <span class=\"token keyword\">import<\/span> routes\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u524d\u306e\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u3067\u3001\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u8a2d\u8a08\u56f3\u306e\u540d\u524d\u3068\u3057\u3066questions\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u307e\u305f\u3001routes.py\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30eb\u30fc\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u304c\u3001\u307e\u3060\u4f5c\u6210\u3057\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<p>\u6b21\u306b\u3001\u8cea\u554f\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e\u30eb\u30fc\u30c8\u3092\u914d\u7f6e\u3059\u308b\u65b0\u3057\u3044routes.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/questions\/routes.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u4ee5\u4e0b\u306e\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u306equestions\u306eroutes.py<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> render_template\r\n<span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>questions <span class=\"token keyword\">import<\/span> bp\r\n\r\n<span class=\"token decorator annotation punctuation\">@bp<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">index<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">'questions\/index.html'<\/span><span class=\"token punctuation\">)<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u8cea\u554f\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u300cindex.html\u300d\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u300cquestions\u300d\u3092\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u306e\u4e2d\u306b\u4f5c\u6210\u3057\u306a\u304c\u3089\u3001\/\u30eb\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u8cea\u554f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3001\u305d\u306e\u4e2d\u306bindex.html\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">mkdir<\/span> app\/templates\/questions<\/li>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/templates\/questions\/index.html<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u306b\u6b21\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30b3\u30a2\u30d7\u30ea\/\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\/\u8cea\u554f\/\u30a4\u30f3\u30c7\u30c3\u30af\u30b9.html<\/div>\n<pre class=\"post-pre\"><code>{% extends 'base.html' %}\r\n\r\n{% block content %}\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>span<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>title<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{% block title %} Questions {% endblock %}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>span<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>questions<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Questions Blueprint<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n{% endblock %}\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001\u4ed6\u306e\u9752\u5199\u771f\u306e\u4ee5\u524d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3068\u540c\u69d8\u306b\u3001\u30bf\u30a4\u30c8\u30eb\u3068\u30b5\u30d6\u30bf\u30a4\u30c8\u30eb\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>\u300ccreate_app()\u300d\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u5185\u3067\u3001\u30a2\u30d7\u30ea\u306e\u300cquestions blueprint\u300d\u3092\u767b\u9332\u3059\u308b\u305f\u3081\u306b\u3001\u4eca\u306f\u300capp\/__init__.py\u300d\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/__init__.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u3001create_app\uff08\uff09\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30b3\uff08Flask\uff09\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u300c__init__.py\u300d\u30d5\u30a1\u30a4\u30eb\u3002<\/div>\n<pre class=\"post-pre\"><code>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">create_app<\/span><span class=\"token punctuation\">(<\/span>config_class<span class=\"token operator\">=<\/span>Config<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    app <span class=\"token operator\">=<\/span> Flask<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span>\r\n    app<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>from_object<span class=\"token punctuation\">(<\/span>config_class<span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token comment\"># Initialize Flask extensions here<\/span>\r\n\r\n    <span class=\"token comment\"># Register blueprints here<\/span>\r\n    <span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>main <span class=\"token keyword\">import<\/span> bp <span class=\"token keyword\">as<\/span> main_bp\r\n    app<span class=\"token punctuation\">.<\/span>register_blueprint<span class=\"token punctuation\">(<\/span>main_bp<span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>posts <span class=\"token keyword\">import<\/span> bp <span class=\"token keyword\">as<\/span> posts_bp\r\n    app<span class=\"token punctuation\">.<\/span>register_blueprint<span class=\"token punctuation\">(<\/span>posts_bp<span class=\"token punctuation\">,<\/span> url_prefix<span class=\"token operator\">=<\/span><span class=\"token string\">'\/posts'<\/span><span class=\"token punctuation\">)<\/span>\r\n\r\n    <mark><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>questions <span class=\"token keyword\">import<\/span> bp <span class=\"token keyword\">as<\/span> questions_bp<\/mark>\r\n    <mark>app<span class=\"token punctuation\">.<\/span>register_blueprint<span class=\"token punctuation\">(<\/span>questions_bp<span class=\"token punctuation\">,<\/span> url_prefix<span class=\"token operator\">=<\/span><span class=\"token string\">'\/questions'<\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n\r\n    <span class=\"token decorator annotation punctuation\">@app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/test\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">test_page<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n        <span class=\"token keyword\">return<\/span> <span class=\"token string\">'&lt;h1&gt;Testing the Flask Application Factory Pattern&lt;\/h1&gt;'<\/span>\r\n\r\n    <span class=\"token keyword\">return<\/span> app\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u6295\u7a3f\u306e\u8a2d\u8a08\u56f3\u3068\u540c\u69d8\u306b\u3001\u8cea\u554f\u306e\u8a2d\u8a08\u56f3\u3092\u767b\u9332\u3057\u3001\u305d\u306e\u30eb\u30fc\u30c8\u306b\u300c\/questions\u300d\u306e\u63a5\u982d\u8f9e\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p>\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u304c\u7a3c\u50cd\u3057\u3066\u3044\u308b\u72b6\u614b\u3067\u3001\u30d6\u30e9\u30a6\u30b6\u3092\u4f7f\u7528\u3057\u3066\u4ee5\u4e0b\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>http:\/\/127.0.0.1:5000\/questions\/\r\n<\/code><\/pre>\n<p>\u30da\u30fc\u30b8\u306b\u306f\u300c\u8cea\u554f\u300d\u3068\u300c\u8cea\u554f\u306e\u8a2d\u8a08\u56f3\u300d\u306e\u898b\u51fa\u3057\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u4eca\u3001\u8cea\u554f\u30ea\u30f3\u30af\u3092\u6a5f\u80fd\u3055\u305b\u3066\u304f\u3060\u3055\u3044\u3002\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30d0\u30fc\u3092\u7de8\u96c6\u3059\u308b\u305f\u3081\u306b\u3001\u30d9\u30fc\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/templates\/base.html<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u8868\u73fe\u3067<\/p>\n<nav>\u30bf\u30b0\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\/\u30d9\u30fc\u30b9.html<\/div>\n<pre class=\"post-pre\"><code>    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>nav<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>{{ url_for('main.index') }}<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>FlaskApp<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>{{ url_for('posts.index') }}<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Posts<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>{{ url_for('posts.categories') }}<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Categories<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span><mark>{{ url_for('questions.index') }}<\/mark><span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Questions<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>nav<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001url_for(&#8216;questions.index&#8217;) \u95a2\u6570\u547c\u3073\u51fa\u3057\u3092\u4f7f\u7528\u3057\u3066\u3001\u8cea\u554f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u306b\u30ea\u30f3\u30af\u3057\u307e\u3059\u3002<\/p>\n<p>\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30d0\u30fc\u306e\u300c\u8cea\u554f\u300d\u30ea\u30f3\u30af\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3059\u308b\u305f\u3081\u306b\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4efb\u610f\u306e\u30da\u30fc\u30b8\u3092\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3042\u306a\u305f\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7570\u306a\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306b\u3044\u304f\u3064\u304b\u306e\u8a2d\u8a08\u56f3\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306e\u8a2d\u8a08\u56f3\u3092\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u306b\u767b\u9332\u3057\u3001\u5404\u30eb\u30fc\u30c8\u306b\u5bfe\u3057\u3066\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u307e\u3057\u305f\u3002\u6b21\u306b\u3001Flask-SQLAlchemy\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u8ffd\u52a0\u3057\u3066\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u3067\u5927\u898f\u6a21\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u7ba1\u7406\u30fb\u6574\u7406\u3057\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d75 \u2014 Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306bFlask-SQLAlchemy\u30e2\u30c7\u30eb\u3092\u8ffd\u52a0\u3059\u308b<\/h2>\n<p>\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001Flask-SQLAlchemy\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u7d71\u5408\u3057\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30e2\u30c7\u30eb\u7528\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u8ffd\u52a0\u3057\u3001\u6295\u7a3f\u3068\u8cea\u554f\u306e\u305f\u3081\u306e\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u6295\u7a3f\u30c6\u30fc\u30d6\u30eb\u306b\u3044\u304f\u3064\u304b\u306e\u30d6\u30ed\u30b0\u6295\u7a3f\u3092\u633f\u5165\u3057\u3001\u305d\u306e\u5f8c\u3001\u6295\u7a3f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30eb\u30fc\u30c8\u3092\u7de8\u96c6\u3057\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5185\u306e\u3059\u3079\u3066\u306e\u6295\u7a3f\u3092\u8868\u793a\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u3044\u304f\u3064\u304b\u306e\u8cea\u554f\u3068\u56de\u7b54\u3092\u8cea\u554f\u30c6\u30fc\u30d6\u30eb\u306b\u633f\u5165\u3057\u3001\u8cea\u554f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u306b\u8868\u793a\u3057\u3001\u3055\u3089\u306a\u308b\u8cea\u554f\u3068\u56de\u7b54\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306e\u65b0\u3057\u3044\u30a6\u30a7\u30d6\u30d5\u30a9\u30fc\u30e0\u3082\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u73fe\u6642\u70b9\u3067\u306eflask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u69cb\u9020\uff08\u4eee\u60f3\u74b0\u5883\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u9664\u304f\uff09\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 flask_app\r\n    \u251c\u2500\u2500 app\r\n    \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u251c\u2500\u2500 main\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u251c\u2500\u2500 posts\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u251c\u2500\u2500 questions\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u2514\u2500\u2500 templates\r\n    \u2502       \u251c\u2500\u2500 base.html\r\n    \u2502       \u251c\u2500\u2500 index.html\r\n    \u2502       \u251c\u2500\u2500 posts\r\n    \u2502       \u2502   \u251c\u2500\u2500 categories.html\r\n    \u2502       \u2502   \u2514\u2500\u2500 index.html\r\n    \u2502       \u2514\u2500\u2500 questions\r\n    \u2502           \u2514\u2500\u2500 index.html\r\n    \u2514\u2500\u2500 config.py\r\n<\/code><\/pre>\n<h3>Flask\u306e\u62e1\u5f35\u6a5f\u80fd\u3092\u7ba1\u7406\u3057\u3001Flask-SQLAlchemy\u3092\u7d71\u5408\u3059\u308b\u305f\u3081\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b\u3002<\/h3>\n<p>\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306bFlask-SQLAlchemy\u62e1\u5f35\u6a5f\u80fd\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u307e\u305a\u300cextensions.py\u300d\u3068\u3044\u3046Python\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30a2\u30d7\u30ea\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\u3053\u306e\u4e2d\u3067\u3001\u3055\u307e\u3056\u307e\u306aFlask\u62e1\u5f35\u6a5f\u80fd\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u65b0\u3057\u3044extensions.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/extensions.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u65b0\u3057\u304f\u4f5c\u6210\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30a2\u30d7\u30ea\/\u30a8\u30af\u30b9\u30c6\u30f3\u30b7\u30e7\u30f3\u30ba.\u30d4\u30fc\u30a8\u30a4<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask_sqlalchemy <span class=\"token keyword\">import<\/span> SQLAlchemy\r\ndb <span class=\"token operator\">=<\/span> SQLAlchemy<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001Flask-SQLAlchemy\u30d1\u30c3\u30b1\u30fc\u30b8\u304b\u3089SQLAlchemy()\u30af\u30e9\u30b9\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001\u305d\u308c\u3092\u4f7f\u7528\u3057\u3066\u5f15\u6570\u306a\u3057\u3067db\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3067\u69cb\u7bc9\u3059\u308bFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306bSQLAlchemy\u3092\u7d71\u5408\u3059\u308b\u305f\u3081\u306b\u3001\u3053\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002app\/__init__.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304d\u3001\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/__init__.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3066\u521d\u671f\u5316\u3059\u308b\u305f\u3081\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u306e\u300capp\u300d\u30d5\u30a9\u30eb\u30c0\u5185\u306e\u300c__init__.py\u300d\u30d5\u30a1\u30a4\u30eb\u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u308b\u3068: \u300c\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u306e\u300capp\u300d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b\u300c__init__.py\u300d\u30d5\u30a1\u30a4\u30eb\u300d<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> Flask\r\n\r\n<span class=\"token keyword\">from<\/span> config <span class=\"token keyword\">import<\/span> Config\r\n<mark><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>extensions <span class=\"token keyword\">import<\/span> db<\/mark>\r\n\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">create_app<\/span><span class=\"token punctuation\">(<\/span>config_class<span class=\"token operator\">=<\/span>Config<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    app <span class=\"token operator\">=<\/span> Flask<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span>\r\n    app<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>from_object<span class=\"token punctuation\">(<\/span>config_class<span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token comment\"># Initialize Flask extensions here<\/span>\r\n    <mark>db<span class=\"token punctuation\">.<\/span>init_app<span class=\"token punctuation\">(<\/span>app<span class=\"token punctuation\">)<\/span><\/mark>\r\n\r\n    <span class=\"token comment\"># Register blueprints here<\/span>\r\n    <span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>main <span class=\"token keyword\">import<\/span> bp <span class=\"token keyword\">as<\/span> main_bp\r\n    app<span class=\"token punctuation\">.<\/span>register_blueprint<span class=\"token punctuation\">(<\/span>main_bp<span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>posts <span class=\"token keyword\">import<\/span> bp <span class=\"token keyword\">as<\/span> posts_bp\r\n    app<span class=\"token punctuation\">.<\/span>register_blueprint<span class=\"token punctuation\">(<\/span>posts_bp<span class=\"token punctuation\">,<\/span> url_prefix<span class=\"token operator\">=<\/span><span class=\"token string\">'\/posts'<\/span><span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>questions <span class=\"token keyword\">import<\/span> bp <span class=\"token keyword\">as<\/span> questions_bp\r\n    app<span class=\"token punctuation\">.<\/span>register_blueprint<span class=\"token punctuation\">(<\/span>questions_bp<span class=\"token punctuation\">,<\/span> url_prefix<span class=\"token operator\">=<\/span><span class=\"token string\">'\/questions'<\/span><span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token decorator annotation punctuation\">@app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/test\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">test_page<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n        <span class=\"token keyword\">return<\/span> <span class=\"token string\">'&lt;h1&gt;Testing the Flask Application Factory Pattern&lt;\/h1&gt;'<\/span>\r\n\r\n    <span class=\"token keyword\">return<\/span> app\r\n<\/code><\/pre>\n<p>\u4ee5\u524d\u306b\u4f5c\u6210\u3057\u305fapp.extensions\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u3089db\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u767b\u9332\u3059\u308b\u524d\u306b\u3001db.init_app()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u3067Flask-SQLAlchemy\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3057\u3001\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306bdb\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30e9\u30b9\u30b3\u306e\u30d5\u30e9\u30b9\u30b3Alchemy\u3092\u69cb\u6210\u3059\u308b\u305f\u3081\u306b\u3001flask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306econfig.py\u30d5\u30a1\u30a4\u30eb\u3067Config\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u305f\u3053\u3068\u3092\u5fd8\u308c\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u3001\u3059\u3070\u3084\u304f\u601d\u3044\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> config.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3001config.py<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">import<\/span> os\r\n\r\nbasedir <span class=\"token operator\">=<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>abspath<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>dirname<span class=\"token punctuation\">(<\/span>__file__<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\r\n\r\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Config<\/span><span class=\"token punctuation\">:<\/span>\r\n    SECRET_KEY <span class=\"token operator\">=<\/span> os<span class=\"token punctuation\">.<\/span>environ<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'SECRET_KEY'<\/span><span class=\"token punctuation\">)<\/span>\r\n    SQLALCHEMY_DATABASE_URI <span class=\"token operator\">=<\/span> os<span class=\"token punctuation\">.<\/span>environ<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'DATABASE_URI'<\/span><span class=\"token punctuation\">)<\/span>\\\r\n        <span class=\"token keyword\">or<\/span> <span class=\"token string\">'sqlite:\/\/\/'<\/span> <span class=\"token operator\">+<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>basedir<span class=\"token punctuation\">,<\/span> <span class=\"token string\">'app.db'<\/span><span class=\"token punctuation\">)<\/span>\r\n    SQLALCHEMY_TRACK_MODIFICATIONS <span class=\"token operator\">=<\/span> <span class=\"token boolean\">False<\/span>\r\n<\/code><\/pre>\n<p>DATABASE_URI\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3057\u306a\u3044\u5834\u5408\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067app.db\u3068\u3044\u3046\u540d\u524d\u306eSQLite\u30d5\u30a1\u30a4\u30eb\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3059\u308b\u3068\u3001flask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u73fe\u308c\u307e\u3059\u3002\u78ba\u8a8d\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>Flask\u30b7\u30a7\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u6b63\u3057\u304f\u767b\u9332\u3055\u308c\u305f\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u307e\u305a\u3001\u4eee\u60f3\u74b0\u5883\u3092\u30a2\u30af\u30c6\u30a3\u30d6\u306b\u3057\u3001flask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u3067Flask\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\">FLASK_APP<\/span><span class=\"token operator\">=<\/span>app<\/li>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\">FLASK_ENV<\/span><span class=\"token operator\">=<\/span>development<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30d5\u30e9\u30b9\u30b3\u306e\u30b7\u30a7\u30eb\u3092\u958b\u304f\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\">flask shell<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30a2\u30d7\u30ea\u306eextensions\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u3089db\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3066\u3001\u305d\u308c\u3092\u30d7\u30ea\u30f3\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"&gt;&gt;&gt;\">from app.extensions <span class=\"token function\">import<\/span> db<\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">print<span class=\"token punctuation\">(<\/span>db<span class=\"token punctuation\">)<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d1\u30b9\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&lt;SQLAlchemy engine=sqlite:\/\/\/<mark>your_path_to_flask_app<\/mark>\/app.db&gt;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3053\u306e\u51fa\u529b\u306f\u3001db\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u6b63\u3057\u304f\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002Flask\u30b7\u30a7\u30eb\u3067\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u969b\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u3001\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u9032\u3080\u524d\u306b\u30d5\u30a1\u30af\u30c8\u30ea\u95a2\u6570\u3067db\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6b63\u3057\u304f\u767b\u9332\u3057\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002Flask\u30b7\u30a7\u30eb\u3092\u7d42\u4e86\u3059\u308b\u306b\u306f\u3001exit()\u3068\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h3>\u30dd\u30b9\u30c8\u30e2\u30c7\u30eb\u306e\u4f5c\u6210\u3068\u30a4\u30f3\u30bf\u30e9\u30af\u30b7\u30e7\u30f3<\/h3>\n<p>\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4f55\u767e\u3082\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30fc\u30d6\u30eb\u304c\u5fc5\u8981\u306b\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u3053\u308c\u3089\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306b\u306f\u4f55\u767e\u3082\u306eSQLAlchemy\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5168\u3066\u306e\u30e2\u30c7\u30eb\u30921\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u307e\u3068\u3081\u308b\u3068\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u304c\u56f0\u96e3\u306b\u306a\u308b\u305f\u3081\u3001\u30e2\u30c7\u30eb\u3092models\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u5225\u3005\u306ePython\u30d5\u30a1\u30a4\u30eb\u306b\u5206\u5272\u3057\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7279\u5b9a\u306e\u90e8\u5206\u306b\u95a2\u9023\u3059\u308b\u30e2\u30c7\u30eb\u3084\u95a2\u6570\u3092\u683c\u7d0d\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u6295\u7a3f\u306e\u7ba1\u7406\u306b\u95a2\u9023\u3059\u308b\u30e2\u30c7\u30eb\u3084\u95a2\u6570\u3092app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306emodels\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306epost.py\u30d5\u30a1\u30a4\u30eb\u306b\u914d\u7f6e\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u3053\u306e\u6bb5\u968e\u3067\u306f\u3001\u3042\u306a\u305f\u306eflask_app\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u69cb\u9020\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff08\u4eee\u60f3\u74b0\u5883\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u9664\u304f\uff09\uff1a<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 flask_app\r\n    \u251c\u2500\u2500 app\r\n    \u2502   \u251c\u2500\u2500 extensions.py\r\n    \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u251c\u2500\u2500 main\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u251c\u2500\u2500 posts\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u251c\u2500\u2500 questions\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u2514\u2500\u2500 templates\r\n    \u2502       \u251c\u2500\u2500 base.html\r\n    \u2502       \u251c\u2500\u2500 index.html\r\n    \u2502       \u251c\u2500\u2500 posts\r\n    \u2502       \u2502   \u251c\u2500\u2500 categories.html\r\n    \u2502       \u2502   \u2514\u2500\u2500 index.html\r\n    \u2502       \u2514\u2500\u2500 questions\r\n    \u2502           \u2514\u2500\u2500 index.html\r\n    \u2514\u2500\u2500 config.py\r\n<\/code><\/pre>\n<p>\u6295\u7a3f\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u3001\u307e\u305a\u30a2\u30d7\u30ea\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306bmodels\u3068\u3044\u3046\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">mkdir<\/span> app\/models<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3067\u306f\u3001\u30e2\u30c7\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306bpost.py\u3068\u3044\u3046\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/models\/post.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u65b0\u3057\u304f\u4f5c\u6210\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u3001\u6b21\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30a2\u30d7\u30ea\u30e2\u30c7\u30eb\/\u30dd\u30b9\u30c8.py<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>extensions <span class=\"token keyword\">import<\/span> db\r\n\r\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Post<\/span><span class=\"token punctuation\">(<\/span>db<span class=\"token punctuation\">.<\/span>Model<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token builtin\">id<\/span> <span class=\"token operator\">=<\/span> db<span class=\"token punctuation\">.<\/span>Column<span class=\"token punctuation\">(<\/span>db<span class=\"token punctuation\">.<\/span>Integer<span class=\"token punctuation\">,<\/span> primary_key<span class=\"token operator\">=<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span>\r\n    title <span class=\"token operator\">=<\/span> db<span class=\"token punctuation\">.<\/span>Column<span class=\"token punctuation\">(<\/span>db<span class=\"token punctuation\">.<\/span>String<span class=\"token punctuation\">(<\/span><span class=\"token number\">150<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\r\n    content <span class=\"token operator\">=<\/span> db<span class=\"token punctuation\">.<\/span>Column<span class=\"token punctuation\">(<\/span>db<span class=\"token punctuation\">.<\/span>Text<span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__repr__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n        <span class=\"token keyword\">return<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f'&lt;Post \"<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>self<span class=\"token punctuation\">.<\/span>title<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"&gt;'<\/span><\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>app.extensions\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u3089db\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u305d\u3057\u3066\u3001db.Model\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066Flask-SQLAlchemy\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30e2\u30c7\u30eb\u3067\u3042\u308bPost\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30e2\u30c7\u30eb\u5185\u306b\u306f\u3001\u4e3b\u30ad\u30fc\u3068\u3057\u3066\u306eID\u6574\u6570\u5217\uff08id\uff09\u3001\u6295\u7a3f\u30bf\u30a4\u30c8\u30eb\u306e\u305f\u3081\u306e\u6587\u5b57\u5217\u5217\uff08title\uff09\u3001\u304a\u3088\u3073\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u305f\u3081\u306e\u30c6\u30ad\u30b9\u30c8\u5217\uff08content\uff09\u304c\u3042\u308a\u307e\u3059\u3002\u5404\u6295\u7a3f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u6587\u5b57\u5217\u8868\u73fe\u3068\u3057\u3066\u3001\u30bf\u30a4\u30c8\u30eb\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u7279\u6b8a\u306a__repr__()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002Flask-SQLAlchemy\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u3084\u308a\u53d6\u308a\u306bFlask-SQLAlchemy\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u6b21\u306b\u3001Flask\u30b7\u30a7\u30eb\u3092\u958b\u3044\u3066\u3001\u6295\u7a3f\u30e2\u30c7\u30eb\u306b\u57fa\u3065\u3044\u3066\u6295\u7a3f\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\">flask shell<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u3066\u3001\u6295\u7a3f\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"&gt;&gt;&gt;\">from app.extensions <span class=\"token function\">import<\/span> db<\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">from app.models.post <span class=\"token function\">import<\/span> Post<\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">db.create_all<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30a2\u30d7\u30ea\u306e`extensions`\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u3089`db`\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001`models.post`\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u3089`Post`\u30e2\u30c7\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001`create_all()`\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066`posts`\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u30b3\u30fc\u30c9\u306f\u51fa\u529b\u306a\u3057\u3067\u5b9f\u884c\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u3001app\/extensions.py\u3068app\/models\/post.py\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d\u3057\u3001\u524d\u306e\u624b\u9806\u3092\u6b63\u3057\u304f\u5b9f\u884c\u3057\u305f\u304b\u3069\u3046\u304b\u3092\u518d\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1adb.create_all()\u95a2\u6570\u306f\u3001\u65e2\u306b\u5b58\u5728\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u3092\u518d\u4f5c\u6210\u307e\u305f\u306f\u66f4\u65b0\u3057\u307e\u305b\u3093\u3002\u4f8b\u3048\u3070\u3001\u30e2\u30c7\u30eb\u306b\u65b0\u3057\u3044\u5217\u3092\u8ffd\u52a0\u3057\u3066db.create_all()\u95a2\u6570\u3092\u5b9f\u884c\u3057\u3066\u3082\u3001\u65e2\u306b\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\u30e2\u30c7\u30eb\u3078\u306e\u5909\u66f4\u306f\u30c6\u30fc\u30d6\u30eb\u306b\u9069\u7528\u3055\u308c\u307e\u305b\u3093\u3002\u89e3\u6c7a\u7b56\u3068\u3057\u3066\u306f\u3001db.drop_all()\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30fc\u30d6\u30eb\u3092\u524a\u9664\u3057\u3001db.create_all()\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u518d\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\uff1a<br \/>\ndb.drop_all()<br \/>\ndb.create_all()<\/div>\n<p>\u3053\u308c\u3089\u306e\u30b3\u30de\u30f3\u30c9\u306f\u3001\u30e2\u30c7\u30eb\u3078\u306e\u5909\u66f4\u3092\u9069\u7528\u3057\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5185\u306e\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u3092\u3059\u3079\u3066\u524a\u9664\u3057\u307e\u3059\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u66f4\u65b0\u3057\u3001\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u3092\u4fdd\u6301\u3059\u308b\u306b\u306f\u3001\u30b9\u30ad\u30fc\u30de\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002Flask\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4ecb\u3057\u3066SQLAlchemy\u306e\u30b9\u30ad\u30fc\u30de\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u3001Flask-Migrate\u62e1\u5f35\u6a5f\u80fd\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n<p>\u6b21\u306b\u3001\u6b21\u306e\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u3066\u3001\u30e9\u30f3\u30c0\u30e0\u306a\u6295\u7a3f\u309210\u500b\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"&gt;&gt;&gt;\"><span class=\"token function\">import<\/span> random<\/li>\n<li data-prefix=\"&gt;&gt;&gt;\"><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\"><span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> range<span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span>, <span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span>:<\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">random_num <span class=\"token operator\">=<\/span> random.randrange<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span>, <span class=\"token number\">1000<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">post <span class=\"token operator\">=<\/span> Post<span class=\"token punctuation\">(<\/span>title<span class=\"token operator\">=<\/span>f<span class=\"token string\">&#8216;Post #{random_num}&#8217;<\/span>,<\/li>\n<li data-prefix=\"&gt;&gt;&gt;\"><span class=\"token assign-left variable\">content<\/span><span class=\"token operator\">=<\/span>f<span class=\"token string\">&#8216;Content #{random_num}&#8217;<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">db.session.add<span class=\"token punctuation\">(<\/span>post<span class=\"token punctuation\">)<\/span><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">print<span class=\"token punctuation\">(<\/span>post<span class=\"token punctuation\">)<\/span><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">print<span class=\"token punctuation\">(<\/span>post.content<span class=\"token punctuation\">)<\/span><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">print<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#8216;&#8211;&#8216;<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">db.session.commit<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3042\u306a\u305f\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3042\u308bdb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001Post\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30e2\u30c7\u30eb\u3068\u30e9\u30f3\u30c0\u30e0\u306aPython\u30e2\u30b8\u30e5\u30fc\u30eb\u3082\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066\u30e9\u30f3\u30c0\u30e0\u306a\u6570\u5b57\u3092\u751f\u6210\u3057\u3001\u7570\u306a\u308b\u30bf\u30a4\u30c8\u30eb\u3068\u5185\u5bb9\u3092\u6301\u3064\u30b5\u30f3\u30d7\u30eb\u8a18\u4e8b\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002for\u30eb\u30fc\u30d7\u3068range() Python\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u3001\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u309210\u56de\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002<\/p>\n<p>for\u30eb\u30fc\u30d7\u3067\u306f\u3001random.randrange\uff08\uff09\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30011\u304b\u30891000\u306e\u30e9\u30f3\u30c0\u30e0\u306a\u6574\u6570\u3092\u751f\u6210\u3057\u3001random_num\u3068\u3044\u3046\u5909\u6570\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002\u6b21\u306b\u3001Post\u30e2\u30c7\u30eb\u3092\u4f7f\u7528\u3057\u3066\u6295\u7a3f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3001random_num\u5909\u6570\u306e\u4e2d\u306e\u30e9\u30f3\u30c0\u30e0\u306a\u6570\u5b57\u3092\u4f7f\u7528\u3057\u3066\u3001\u30b5\u30f3\u30d7\u30eb\u306e\u6295\u7a3f\u30bf\u30a4\u30c8\u30eb\u3068\u5185\u5bb9\u3092\u751f\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u305d\u306e\u5f8c\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u6295\u7a3f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8ffd\u52a0\u3057\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u305d\u306e\u5185\u5bb9\u3092\u8868\u793a\u3057\u3001\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u3092\u78ba\u5b9a\u3055\u305b\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u307e\u3059\u304c\u3001\u6570\u5b57\u304c\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&lt;Post &#8220;Post #58&#8221;&gt; Content #58 &#8212; &lt;Post &#8220;Post #55&#8221;&gt; Content #55 &#8212; &lt;Post &#8220;Post #994&#8221;&gt; Content #994 &#8212; &lt;Post &#8220;Post #394&#8221;&gt; Content #394 &#8212; &lt;Post &#8220;Post #183&#8221;&gt; Content #183 &#8212; &lt;Post &#8220;Post #633&#8221;&gt; Content #633 &#8212; &lt;Post &#8220;Post #790&#8221;&gt; Content #790 &#8212; &lt;Post &#8220;Post #883&#8221;&gt; Content #883 &#8212; &lt;Post &#8220;Post #259&#8221;&gt; Content #259 &#8212; &lt;Post &#8220;Post #581&#8221;&gt; Content #581 &#8212;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u5404\u6295\u7a3f\u306f\u30e9\u30f3\u30c0\u30e0\u306b\u751f\u6210\u3055\u308c\u305f\u756a\u53f7\u304c\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6295\u7a3f\u306f\u4eca\u5f8c\u3001\u3042\u306a\u305f\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>Flask\u30b7\u30a7\u30eb\u3092\u5b9f\u884c\u3057\u305f\u307e\u307e\u306b\u3057\u3066\u3001\u65b0\u3057\u3044\u30bf\u30fc\u30df\u30ca\u30eb\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002\u74b0\u5883\u3092\u8aad\u307f\u8fbc\u3093\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30a9\u30eb\u30c0\u306b\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30c6\u30fc\u30d6\u30eb\u306b\u3044\u304f\u3064\u304b\u306e\u30b5\u30f3\u30d7\u30eb\u6295\u7a3f\u304c\u3042\u308b\u306e\u3067\u3001\u305d\u308c\u3089\u3092\u6295\u7a3f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u306b\u8868\u793a\u3067\u304d\u307e\u3059\u3002\u307e\u305a\u3001\u6295\u7a3f\u306e\u30eb\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30eb\u30fc\u30c8\u3092\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/posts\/routes.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u3001\u30a4\u30f3\u30dd\u30fc\u30c8\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30eb\u30fc\u30c8\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u65e5\u672c\u8a9e\u3067\u81ea\u7136\u306b\u8a00\u3044\u63db\u3048\u305f\u3082\u306e\u30921\u3064\u63d0\u793a\u3057\u307e\u3059\uff1a<br \/>\n\u30d5\u30e9\u30b9\u30b3\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eapp\u30d5\u30a9\u30eb\u30c0\u5185\u306eposts\/routes.py\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> render_template\r\n<span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>posts <span class=\"token keyword\">import<\/span> bp\r\n<mark><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>extensions <span class=\"token keyword\">import<\/span> db<\/mark>\r\n<mark><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>models<span class=\"token punctuation\">.<\/span>post <span class=\"token keyword\">import<\/span> Post<\/mark>\r\n\r\n\r\n<span class=\"token decorator annotation punctuation\">@bp<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">index<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    <mark>posts <span class=\"token operator\">=<\/span> Post<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">all<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">'posts\/index.html'<\/span><mark><span class=\"token punctuation\">,<\/span> posts<span class=\"token operator\">=<\/span>posts<\/mark><span class=\"token punctuation\">)<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002 (\u30d5\u30a1\u30a4\u30eb\u3092\u307b\u305e\u3093\u3057\u3066\u3068\u3058\u3066\u304f\u3060\u3055\u3044\u3002)<\/p>\n<p>\u3042\u306a\u305f\u306f\u3001db\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068Post\u30e2\u30c7\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5185\u306e\u3059\u3079\u3066\u306e\u6295\u7a3f\u3092\u53d6\u5f97\u3057\u3001\u305d\u308c\u3089\u3092\u6295\u7a3f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3057\u307e\u3059\u3002<\/p>\n<p>\u6e21\u3055\u308c\u305f\u6295\u7a3f\u3092\u8868\u793a\u3059\u308b\u305f\u3081\u306b\u3001\u6295\u7a3f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4fee\u6b63\u3057\u3066\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/templates\/posts\/index.html<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\/\u6295\u7a3f\/\u30a4\u30f3\u30c7\u30c3\u30af\u30b9.html<\/div>\n<pre class=\"post-pre\"><code>{% extends 'base.html' %}\r\n\r\n{% block content %}\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>span<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>title<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{% block title %} The Posts Page {% endblock %}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>span<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>content<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>This is the posts Flask blueprint<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <mark>{% for post in posts %}<\/mark>\r\n            <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>post<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>p<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>b<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>#{{ post.id }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>b<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>p<\/span><\/span><\/mark><span class=\"token tag\"><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n                <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>p<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>title<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                    <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>b<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                        <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>#<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                            <mark>{{ post.title }}<\/mark>\r\n                        <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                    <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>b<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>p<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>content<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                    <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>p<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{{ post.content }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>p<\/span><\/span><\/mark><span class=\"token tag\"><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n                <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>hr<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n            <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n        <mark>{% endfor %}<\/mark>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n{% endblock %}\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001\u6295\u7a3f\u3092\u30eb\u30fc\u30d7\u51e6\u7406\u3057\u3066\u3001\u305d\u308c\u305e\u308c\u306e\u6295\u7a3f\u306eID\u3001\u30bf\u30a4\u30c8\u30eb\u3001\u304a\u3088\u3073\u5185\u5bb9\u3092\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n<p>\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u304c\u7a3c\u50cd\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u6295\u7a3f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u304b\u3001\u65e2\u306b\u958b\u3044\u3066\u3044\u308b\u5834\u5408\u306f\u66f4\u65b0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>http:\/\/127.0.0.1:5000\/posts\/\r\n<\/code><\/pre>\n<p>\u751f\u6210\u3055\u308c\u305f\u30b5\u30f3\u30d7\u30eb\u6295\u7a3f\u306f\u3001\u4ee5\u4e0b\u306e\u30a4\u30e1\u30fc\u30b8\u3068\u4f3c\u305f\u3088\u3046\u306b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65645eb3daa94e2bdf7b27c6\/329-0.png\" alt=\"The Posts Page\" \/><\/div>\n<p>\u4eca\u3001\u6295\u7a3f\u306e\u305f\u3081\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30e2\u30c7\u30eb\u304c\u3042\u308a\u307e\u3059\u3002\u65b0\u3057\u3044\u30eb\u30fc\u30c8\u3084\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001\u6295\u7a3f\u306e\u4f5c\u6210\u3001\u7de8\u96c6\u3001\u524a\u9664\u3068\u3044\u3063\u305f\u6a5f\u80fd\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>\u8cea\u554f\u30e2\u30c7\u30eb\u306e\u4f5c\u6210\u3068\u5bfe\u8a71<\/h3>\n<p>\u3042\u306a\u305f\u306f\u6295\u7a3f\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3057\u3001\u6295\u7a3f\u306e\u8a2d\u8a08\u56f3\u3067\u305d\u308c\u3068\u3084\u308a\u53d6\u308a\u3057\u307e\u3057\u305f\u3002\u4eca\u5ea6\u306f\u3001\u8cea\u554f\u3068\u56de\u7b54\u306e\u7ba1\u7406\u306e\u305f\u3081\u306b\u8cea\u554f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30e2\u30c7\u30eb\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u6bb5\u968e\u3067\u306f\u3001\u3042\u306a\u305f\u306eflask_app\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff08\u4eee\u60f3\u74b0\u5883\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u9664\u304f\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 flask_app\r\n    \u251c\u2500\u2500 app\r\n    \u2502   \u251c\u2500\u2500 extensions.py\r\n    \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u251c\u2500\u2500 main\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u251c\u2500\u2500 models\r\n    \u2502   \u2502   \u2514\u2500\u2500 post.py\r\n    \u2502   \u251c\u2500\u2500 posts\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u251c\u2500\u2500 questions\r\n    \u2502   \u2502   \u251c\u2500\u2500 __init__.py\r\n    \u2502   \u2502   \u2514\u2500\u2500 routes.py\r\n    \u2502   \u2514\u2500\u2500 templates\r\n    \u2502       \u251c\u2500\u2500 base.html\r\n    \u2502       \u251c\u2500\u2500 index.html\r\n    \u2502       \u251c\u2500\u2500 posts\r\n    \u2502       \u2502   \u251c\u2500\u2500 categories.html\r\n    \u2502       \u2502   \u2514\u2500\u2500 index.html\r\n    \u2502       \u2514\u2500\u2500 questions\r\n    \u2502           \u2514\u2500\u2500 index.html\r\n    \u251c\u2500\u2500 app.db\r\n    \u2514\u2500\u2500 config.py\r\n<\/code><\/pre>\n<p>\u554f\u984c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u3001\u30e2\u30c7\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306bquestion.py\u3068\u3044\u3046\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/models\/question.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u300cquestion.py\u300d\u30d5\u30a1\u30a4\u30eb\u306e\u30e2\u30c7\u30eb\u3092\u65e5\u672c\u8a9e\u306b\u7f6e\u304d\u63db\u3048\u308b\u3068\u3001\u300c\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\/app\/models\/question.py\u300d\u3068\u306a\u308a\u307e\u3059\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>extensions <span class=\"token keyword\">import<\/span> db\r\n\r\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Question<\/span><span class=\"token punctuation\">(<\/span>db<span class=\"token punctuation\">.<\/span>Model<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token builtin\">id<\/span> <span class=\"token operator\">=<\/span> db<span class=\"token punctuation\">.<\/span>Column<span class=\"token punctuation\">(<\/span>db<span class=\"token punctuation\">.<\/span>Integer<span class=\"token punctuation\">,<\/span> primary_key<span class=\"token operator\">=<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span>\r\n    content <span class=\"token operator\">=<\/span> db<span class=\"token punctuation\">.<\/span>Column<span class=\"token punctuation\">(<\/span>db<span class=\"token punctuation\">.<\/span>Text<span class=\"token punctuation\">)<\/span>\r\n    answer <span class=\"token operator\">=<\/span> db<span class=\"token punctuation\">.<\/span>Column<span class=\"token punctuation\">(<\/span>db<span class=\"token punctuation\">.<\/span>Text<span class=\"token punctuation\">)<\/span>\r\n\r\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__repr__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n        <span class=\"token keyword\">return<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f'&lt;Question <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>self<span class=\"token punctuation\">.<\/span>content<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&gt;'<\/span><\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u3053\u308c\u306f\u3001app.extensions\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u3089db\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u6b21\u306b\u3001db.Model\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3001Question\u3068\u3044\u3046\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30e2\u30c7\u30eb\u306b\u306f\u3001\u30d7\u30e9\u30a4\u30de\u30ea\u30ad\u30fc\u3068\u3057\u3066ID\u306e\u6574\u6570\u5217\uff08id\uff09\u3001\u8cea\u554f\u5185\u5bb9\u306e\u30c6\u30ad\u30b9\u30c8\u5217\uff08content\uff09\u3001\u304a\u3088\u3073\u56de\u7b54\u306e\u30c6\u30ad\u30b9\u30c8\u5217\uff08answer\uff09\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001\u7279\u5225\u306a__repr__()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u3001\u5404\u8cea\u554f\u3092\u305d\u306e\u5185\u5bb9\u3067\u8868\u3057\u307e\u3059\u3002<\/p>\n<p>Flask\u306e\u30b7\u30a7\u30eb\u3067\u5b9f\u884c\u3057\u3066\u3044\u308b\u30bf\u30fc\u30df\u30ca\u30eb\u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u3066\u3001\u8cea\u554f\u30e2\u30c7\u30eb\u306b\u57fa\u3065\u3044\u305f\u8cea\u554f\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\">flask shell<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6b21\u306e\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u3066\u3001\u8cea\u554f\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3057\u3001\u3044\u304f\u3064\u304b\u306e\u8cea\u554f\u3068\u56de\u7b54\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"&gt;&gt;&gt;\">from app.extensions <span class=\"token function\">import<\/span> db<\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">from app.models.question <span class=\"token function\">import<\/span> Question<\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">db.create_all<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\"><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">q1 <span class=\"token operator\">=<\/span> Question<span class=\"token punctuation\">(<\/span>content<span class=\"token operator\">=<\/span><span class=\"token string\">&#8216;Why is the sky blue?&#8217;<\/span>, <span class=\"token assign-left variable\">answer<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">&#8216;Because&#8230; Why not?&#8217;<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">q2 <span class=\"token operator\">=<\/span> Question<span class=\"token punctuation\">(<\/span>content<span class=\"token operator\">=<\/span><span class=\"token string\">&#8216;What is love?&#8217;<\/span>, <span class=\"token assign-left variable\">answer<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">&#8216;A portal to the underworld.&#8217;<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">db.session.add_all<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span>q1, q2<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<li data-prefix=\"&gt;&gt;&gt;\">db.session.commit<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30b3\u30fc\u30c9\u306f\u51fa\u529b\u306a\u3057\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u305f\u5834\u5408\u306f\u3001app\/models\/question.py \u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d\u3057\u3066\u3001\u30b3\u30fc\u30c9\u304c\u6b63\u3057\u3044\u69cb\u6587\u3067\u66f8\u304b\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u8cea\u554f\u30e2\u30c7\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001db.create_all()\u3092\u4f7f\u7528\u3057\u3066\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3057\u3001\u6700\u5f8c\u306b2\u3064\u306e\u8cea\u554f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u8ffd\u52a0\u3057\u3066\u30b3\u30df\u30c3\u30c8\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30e9\u30b9\u30b3\u306e\u30b7\u30a7\u30eb\u3092\u7d42\u4e86\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\">exit<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u65b0\u3057\u3044\u8cea\u554f\u30e2\u30c7\u30eb\u306e\u8cea\u554f\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068\u5bfe\u8a71\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u306b\u306f\u3001\u8cea\u554f\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306eroutes.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u3001\u8cea\u554f\u30c6\u30fc\u30d6\u30eb\u306b\u3042\u308b\u8cea\u554f\u3092\u30af\u30a8\u30ea\u3057\u3001\u8868\u793a\u3059\u308b\u305f\u3081\u306e\u5909\u66f4\u3092\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/questions\/routes.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306equestions\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u3042\u308broutes.py\u30d5\u30a1\u30a4\u30eb\u3092\u65e5\u672c\u8a9e\u306b\u7ffb\u8a33\u3059\u308b\u3068\u3001\u300cflask_app\/\u30a2\u30d7\u30ea\/\u8cea\u554f\/\u30eb\u30fc\u30c8.py\u300d\u3068\u306a\u308a\u307e\u3059\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> render_template\r\n<span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>questions <span class=\"token keyword\">import<\/span> bp\r\n<mark><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>models<span class=\"token punctuation\">.<\/span>question <span class=\"token keyword\">import<\/span> Question<\/mark>\r\n\r\n<span class=\"token decorator annotation punctuation\">@bp<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">index<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    <mark>questions <span class=\"token operator\">=<\/span> Question<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">all<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">'questions\/index.html'<\/span><mark><span class=\"token punctuation\">,<\/span> questions<span class=\"token operator\">=<\/span>questions<\/mark><span class=\"token punctuation\">)<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001\u8cea\u554f\u30e2\u30c7\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5185\u306e\u3059\u3079\u3066\u306e\u8cea\u554f\u3092\u53d6\u5f97\u3057\u3001\u305d\u308c\u3092\u8cea\u554f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3057\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u8cea\u554f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3057\u305f\u8cea\u554f\u3092\u8868\u793a\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u65b0\u3057\u3044\u8cea\u554f\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306e\u30a6\u30a7\u30d6\u30d5\u30a9\u30fc\u30e0\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u8cea\u554f\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308bindex.html\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/templates\/questions\/index.html<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u3042\u308b &#8220;questions\/index.html&#8221; \u3092\u65e5\u672c\u8a9e\u3067\u8aac\u660e\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/div>\n<pre class=\"post-pre\"><code>{% extends 'base.html' %}\r\n\r\n{% block content %}\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>span<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>title<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{% block title %} Questions {% endblock %}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>span<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>questions<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Questions Blueprint<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n\r\n        <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>question<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n            <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>new-question<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>form<\/span> <span class=\"token attr-name\">method<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>POST<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                    <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>p<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                        <span class=\"token tag\"><mark><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>textarea<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>q-content<\/span><\/mark><span class=\"token attr-value\"><span class=\"token punctuation\">\"<\/span><\/span>\r\n                                <mark><span class=\"token attr-name\">name<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>content<\/span><\/mark><span class=\"token attr-value\"><span class=\"token punctuation\">\"<\/span><\/span>\r\n                                <mark><span class=\"token attr-name\">placeholder<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>Question<\/span><\/mark><span class=\"token attr-value\"><span class=\"token punctuation\">\"<\/span><\/span>\r\n                                <\/span><mark><span class=\"token tag\"><span class=\"token attr-name\">cols<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>30<span class=\"token punctuation\">\"<\/span><\/span> <span class=\"token attr-name\">rows<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>3<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>textarea<\/span><\/span><\/mark><span class=\"token tag\"><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n                    <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>p<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                    <span class=\"token tag\"><mark><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>textarea<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>q-answer<\/span><\/mark><span class=\"token attr-value\"><span class=\"token punctuation\">\"<\/span><\/span>\r\n                            <mark><span class=\"token attr-name\">name<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>answer<\/span><\/mark><span class=\"token attr-value\"><span class=\"token punctuation\">\"<\/span><\/span>\r\n                            <mark><span class=\"token attr-name\">placeholder<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>Answer<\/span><\/mark><span class=\"token attr-value\"><span class=\"token punctuation\">\"<\/span><\/span>\r\n                            <\/span><mark><span class=\"token tag\"><span class=\"token attr-name\">cols<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>30<span class=\"token punctuation\">\"<\/span><\/span> <span class=\"token attr-name\">rows<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>3<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>textarea<\/span><\/span><\/mark><span class=\"token tag\"><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n                    <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>p<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>input<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>submit<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>p<\/span><\/span><\/mark><span class=\"token tag\"><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n                <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>form<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n            <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n            <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>questions-list<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                <mark>{% for question in questions %}<\/mark>\r\n                    <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=<\/span><span class=\"token punctuation\">\"<\/span>question<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                        <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h4<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{{ question.content }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h4<\/span><\/span><\/mark><span class=\"token tag\"><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n                        <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>p<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{{ question.answer }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>p<\/span><\/span><\/mark><span class=\"token tag\"><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n                        <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>hr<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                    <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n                <mark>{% endfor %}<\/mark>\r\n            <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n        <mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/mark>\r\n\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\r\n{% endblock %}\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001\u8cea\u554f\u306e\u5185\u5bb9\u7528\u3068\u56de\u7b54\u7528\u306e2\u3064\u306e\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3092\u6301\u3064\u30d5\u30a9\u30fc\u30e0\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u305d\u3057\u3066\u3001\u305d\u306e\u30d5\u30a9\u30fc\u30e0\u306b\u9001\u4fe1\u30dc\u30bf\u30f3\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30a9\u30fc\u30e0\u306e\u4e0b\u306b\u306f\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30eb\u30fc\u30c8\u304b\u3089\u6e21\u3055\u308c\u305fquestions\u5909\u6570\u3092\u30eb\u30fc\u30d7\u51e6\u7406\u3057\u3001\u5404\u8cea\u554f\u306e\u5185\u5bb9\u3068\u56de\u7b54\u3092\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n<p>\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3057\u305f\u72b6\u614b\u3067\u3001\u30d6\u30e9\u30a6\u30b6\u3092\u4f7f\u7528\u3057\u3066\u8cea\u554f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>http:\/\/127.0.0.1:5000\/questions\/\r\n<\/code><\/pre>\n<p>\u30da\u30fc\u30b8\u306f\u3001\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e\u898b\u51fa\u3057\u3001\u63d0\u51fa\u30d5\u30a9\u30fc\u30e0\u3001\u305d\u3057\u30662\u3064\u306e\u30b5\u30f3\u30d7\u30eb\u8cea\u554f\u3068\u3068\u3082\u306b\u8aad\u307f\u8fbc\u307e\u308c\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65645eb3daa94e2bdf7b27c6\/368-0.png\" alt=\"Questions Index\" \/><\/div>\n<p>\u305f\u3060\u3057\u3001\u30d5\u30a9\u30fc\u30e0\u306b\u5165\u529b\u3057\u3066\u9001\u4fe1\u3059\u308b\u3068\u3001\u30d5\u30a9\u30fc\u30e0\u304c\u8cea\u554f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30eb\u30fc\u30c8\u306bPOST\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3059\u308b\u305f\u3081\u3001405 Method Not Allowed\u306eHTTP\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3059\u304c\u3001\u30eb\u30fc\u30c8\u306fPOST\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u5165\u308c\u305f\u308a\u51e6\u7406\u3057\u305f\u308a\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3057\u3066\u30d5\u30a9\u30fc\u30e0\u3092\u6a5f\u80fd\u3055\u305b\u308b\u305f\u3081\u306b\u3001\u8cea\u554f\u306e\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30eb\u30fc\u30c8\u3092\u5909\u66f4\u3057\u3001\u30d5\u30a9\u30fc\u30e0\u30c7\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u3066\u65b0\u3057\u3044\u8cea\u554f\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u306eroutes.py\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"(env)sammy@localhost:$\"><span class=\"token function\">nano<\/span> app\/questions\/routes.py<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d5\u30e9\u30b9\u30af\u30a2\u30d7\u30ea\u306equestions\/routes.py\u30d5\u30a1\u30a4\u30eb\u3092\u65e5\u672c\u8a9e\u3067\u66f8\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> render_template<mark><span class=\"token punctuation\">,<\/span> request<span class=\"token punctuation\">,<\/span> url_for<span class=\"token punctuation\">,<\/span> redirect<\/mark>\r\n<span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>questions <span class=\"token keyword\">import<\/span> bp\r\n<span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>models<span class=\"token punctuation\">.<\/span>question <span class=\"token keyword\">import<\/span> Question\r\n<mark><span class=\"token keyword\">from<\/span> app<span class=\"token punctuation\">.<\/span>extensions <span class=\"token keyword\">import<\/span> db<\/mark>\r\n\r\n<span class=\"token decorator annotation punctuation\">@bp<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><mark><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">=<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'GET'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'POST'<\/span><span class=\"token punctuation\">)<\/span><\/mark><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">index<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\r\n    questions <span class=\"token operator\">=<\/span> Question<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">all<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\r\n\r\n    <mark><span class=\"token keyword\">if<\/span> request<span class=\"token punctuation\">.<\/span>method <span class=\"token operator\">==<\/span> <span class=\"token string\">'POST'<\/span><span class=\"token punctuation\">:<\/span><\/mark>\r\n        <mark>new_question <span class=\"token operator\">=<\/span> Question<span class=\"token punctuation\">(<\/span>content<span class=\"token operator\">=<\/span>request<span class=\"token punctuation\">.<\/span>form<span class=\"token punctuation\">[<\/span><span class=\"token string\">'content'<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><\/mark>\r\n                                <mark>answer<span class=\"token operator\">=<\/span>request<span class=\"token punctuation\">.<\/span>form<span class=\"token punctuation\">[<\/span><span class=\"token string\">'answer'<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n        <mark>db<span class=\"token punctuation\">.<\/span>session<span class=\"token punctuation\">.<\/span>add<span class=\"token punctuation\">(<\/span>new_question<span class=\"token punctuation\">)<\/span><\/mark>\r\n        <mark>db<span class=\"token punctuation\">.<\/span>session<span class=\"token punctuation\">.<\/span>commit<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n        <mark><span class=\"token keyword\">return<\/span> redirect<span class=\"token punctuation\">(<\/span>url_for<span class=\"token punctuation\">(<\/span><span class=\"token string\">'questions.index'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n\r\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">'questions\/index.html'<\/span><span class=\"token punctuation\">,<\/span> questions<span class=\"token operator\">=<\/span>questions<span class=\"token punctuation\">)<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>methods\u30d1\u30e9\u30e1\u30fc\u30bf\u306b(&#8216;GET&#8217;, &#8216;POST&#8217;)\u306e\u30bf\u30d7\u30eb\u3092\u6e21\u3059\u3053\u3068\u306b\u3088\u308a\u3001GET\u30e1\u30bd\u30c3\u30c9\u3068POST\u30e1\u30bd\u30c3\u30c9\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002POST\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u3001if request.method == &#8216;POST&#8217;: \u306e\u6761\u4ef6\u3067\u51e6\u7406\u3055\u308c\u307e\u3059\u3002\u305d\u306e\u4e2d\u3067\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5185\u5bb9\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u304c\u63d0\u51fa\u3057\u305f\u8cea\u554f\u5185\u5bb9\u3068\u56de\u7b54\u3092\u4f7f\u7528\u3057\u3066\u3001\u65b0\u3057\u3044\u8cea\u554f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u65b0\u3057\u3044\u8cea\u554f\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u8ffd\u52a0\u3057\u3001\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u3092\u30b3\u30df\u30c3\u30c8\u3057\u305f\u5f8c\u3001\u30e6\u30fc\u30b6\u30fc\u3092\u8cea\u554f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30da\u30fc\u30b8\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30a9\u30fc\u30e0\u306f\u4eca\u52d5\u4f5c\u3057\u307e\u3059\u306e\u3067\u3001\u65b0\u3057\u3044\u8cea\u554f\u3084\u56de\u7b54\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u3092http:\/\/127.0.0.1:5000\/questions\/\u306eURL\u3067\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306bFlask-SQLAlchemy\u3092\u7d71\u5408\u3057\u3001\u30e2\u30c7\u30eb\u306e\u305f\u3081\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u8ffd\u52a0\u3057\u3066\u30b3\u30fc\u30c9\u3092\u6574\u7406\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306e\u30b3\u30fc\u30c9\u3068\u3001\u6700\u7d42\u30d5\u30a1\u30a4\u30eb\u3092\u6bd4\u8f03\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2>\u7d50\u8ad6<\/h2>\n<p>\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u3066\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u69cb\u9020\u3092\u7d44\u307f\u7acb\u3066\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3068\u30e2\u30c7\u30eb\u3067\u6574\u7406\u3057\u307e\u3057\u305f\u3002\u5404\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u72ec\u81ea\u306e\u30eb\u30fc\u30c8\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3001\u304a\u3088\u3073\u30e2\u30c7\u30eb\u3092\u8a2d\u5b9a\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u4f8b\u306e\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u306f\u3001\u73fe\u5728\u3001\u7570\u306a\u308b\u65b9\u6cd5\u3067\u62e1\u5f35\u3067\u304d\u308b3\u3064\u306e\u4e3b\u8981\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>The main blueprint: You can add an about page or a contact page for users to contact the application owner.<\/li>\n<li>The posts blueprint: You can add pages for creating, editing, deleting, and sorting posts. You can also add tags to posts using a Many-to-Many database relationship with Flask-SQLAlchemy.<\/li>\n<li>The questions blueprint: You can add pages for managing questions and use a One-to-Many database relationship with Flask-SQLAlchemy to create another table for answers so that a question can have multiple solutions.<\/li>\n<\/ul>\n<p>\u3055\u3089\u306b\u3001\u8a8d\u8a3c\u3001\u652f\u6255\u3044\u3001\u7ba1\u7406\u306a\u3069\u306e\u6a5f\u80fd\u306e\u305f\u3081\u306b\u3001\u8ffd\u52a0\u3067\u9752\u5199\u771f\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>Flask\u306b\u3064\u3044\u3066\u3082\u3063\u3068\u8aad\u307f\u305f\u3044\u5834\u5408\u306f\u3001\u300cFlask\u3067\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u300d\u30b7\u30ea\u30fc\u30ba\u306e\u4ed6\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/nav>\n<\/nav>\n","protected":false},"excerpt":{"rendered":"<p>\u8457\u8005\u306f\u3001\u5bc4\u4ed8\u306e\u4e00\u74b0\u3068\u3057\u3066\u300c\u66f8\u3044\u3066Donate\uff08\u5bc4\u4ed8\uff09\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u300d\u306b\u3088\u308aFree and Open Source Fund\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u3002 \u306f\u3058\u3081\u306b Flask\u306f\u3001\u8efd\u91cf\u306aPython\u306e\u30a6\u30a7\u30d6\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308a\u3001Pyt [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[14,26],"class_list":["post-504","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-14","tag-26"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528 - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/ja\/blog\/\u5927\u898f\u6a21\u306aflask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aflask\u30d6\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528\" \/>\n<meta property=\"og:description\" content=\"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/ja\/blog\/\u5927\u898f\u6a21\u306aflask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aflask\u30d6\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-22T15:08:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-31T15:06:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65645eb3daa94e2bdf7b27c6\/142-0.png\" \/>\n<meta name=\"author\" content=\"\u685c, \u6625\u6a39\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u685c, \u6625\u6a39\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"93\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/\",\"name\":\"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\"},\"datePublished\":\"2023-01-22T15:08:19+00:00\",\"dateModified\":\"2025-07-31T15:06:10+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/ff22288af1a5455571aff7586b0fb341\"},\"description\":\"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/ja\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/ff22288af1a5455571aff7586b0fb341\",\"name\":\"\u685c, \u6625\u6a39\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cee48863f3d4fd7fef222498f3e71b82312aee42b7257a2dbde56394ca4e19de?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cee48863f3d4fd7fef222498f3e71b82312aee42b7257a2dbde56394ca4e19de?s=96&d=mm&r=g\",\"caption\":\"\u685c, \u6625\u6a39\"},\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/author\/sakuraharuki\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528 - Blog - Silicon Cloud","description":"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/ja\/blog\/\u5927\u898f\u6a21\u306aflask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aflask\u30d6\/","og_locale":"ja_JP","og_type":"article","og_title":"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528","og_description":"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","og_url":"https:\/\/www.silicloud.com\/ja\/blog\/\u5927\u898f\u6a21\u306aflask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aflask\u30d6\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-01-22T15:08:19+00:00","article_modified_time":"2025-07-31T15:06:10+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65645eb3daa94e2bdf7b27c6\/142-0.png"}],"author":"\u685c, \u6625\u6a39","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"\u685c, \u6625\u6a39","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"93\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/","url":"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/","name":"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website"},"datePublished":"2023-01-22T15:08:19+00:00","dateModified":"2025-07-31T15:06:10+00:00","author":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/ff22288af1a5455571aff7586b0fb341"},"description":"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/ja\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5927\u898f\u6a21\u306aFlask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\uff1aFlask\u30d6\u30eb\u30fc\u30d7\u30ea\u30f3\u30c8\u3068Flask-SQLAlchemy\u306e\u5229\u7528"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website","url":"https:\/\/www.silicloud.com\/ja\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/ff22288af1a5455571aff7586b0fb341","name":"\u685c, \u6625\u6a39","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cee48863f3d4fd7fef222498f3e71b82312aee42b7257a2dbde56394ca4e19de?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cee48863f3d4fd7fef222498f3e71b82312aee42b7257a2dbde56394ca4e19de?s=96&d=mm&r=g","caption":"\u685c, \u6625\u6a39"},"url":"https:\/\/www.silicloud.com\/ja\/blog\/author\/sakuraharuki\/"},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e5%a4%a7%e8%a6%8f%e6%a8%a1%e3%81%aaflask%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%9aflask%e3%83%96\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/504","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/comments?post=504"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/504\/revisions"}],"predecessor-version":[{"id":41463,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/504\/revisions\/41463"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/media?parent=504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/categories?post=504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/tags?post=504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}