(自用)Django_1(基本的的Hello World模板)

项目

    1. 创建Django项目

 

    1. 指定服务器地址

 

    1. 尝试运行Django

 

    1. Hello World

 

    1. 调用模板(html)

 

    将数据从py一侧传递到模板

1. 成立项目

    • プロジェクト = アプリケーションをまとめる単位

 

    • APPの機能ごとにアプリケーションを作り、最後にそれを馬鹿でかいプロジェクトに纏めるとかが良いと思う

 

    環境構築に関してはDjango_環境構築みたいなのに後日書くかもしれんし書かないかもしれん
# 一回Djangoのバージョンだけ確認しておく
$ python -m django --version

# myappってプロジェクトを作る、startprojectって入れる事でプロジェクトの中身もある程度用意してくれる
$ django-admin startproject myapp
    • これによって、自分が居たディレクトリの中にmyappってディレクトリが出来ている

myappの中身

manage.py:このプロジェクトを動かしたり管理したりする時に使う、名前そのまま

myapp(myappの中にもう1つmyappがある)

__init__.py:このディレクトリでPythonを使うと宣言する

asgi.py:ASGI互換サーバに接続する際の基点になるらしい、よく分からない

settings.py:ここを編集する事でプロジェクトの設定を弄れる

urls.py:ここに接続した時、どのdefを動かすかを決める

wsgi.py:WSGI互換サーバに接続する際の基点、全然分からない

startprojectによって上に書いた馬鹿でかいプロジェクトが作れる

2. 指定服务器地址

    サーバからどのアドレスに接続すれば良いかを教えてあげる
# ここを見つけ出して、自分のページのアドレスを入れる

# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True

ALLOWED_HOSTS = ["自分のアドレス"]

尝试运行Django。

# myappへ移動
$ cd myapp

# Djangoのサーバを動かす
$ python manage.py runserver

https://localhost:8000/にアクセスして、ロケットが出てくれば成功
言うまでも無いが、実行終了はCtrl + c

你好,世界

    プロジェクト = アプリケーションが沢山集まったもの
# 上で作ったmyapp(馬鹿でかいプロジェクト)に移動
$ cd myapp

# myapp内にアプリーション作成、startappでアプリケーションを作るよと宣言
# 例に漏れず作ったアプリケーションの中に有る程度用意がされている
$ python manage.py startapp hello
myapp
┣━ hello
┣━ manage.py
┗━ myapp
    • こんな感じのディレクトリが出来上がる

helloの中身は取り敢えずviews.pyだけ意識すればOK

views.pyはバックエンドの動きとかを書く場所、Flaskのpyファイルと同じ

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello World')

index(request)で、この関数が要求された時にHttpResponse()の中に入った値を返す

requestメソッドされたらHttpResponseの中身を返すと覚えればOK

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('hello/', include('hello.urls')),
    path('admin/', admin.site.urls),
]
    • プロジェクトのルーティング

 

    • このパスの時にどのアプリケーションを動かすかを設定する

 

    • ここではリンクの末尾が/helloの時、helloアプリケーションを動かすよと言っている

 

    • Djangoの動く流れ

プロジェクトのルーティング→アプリのルーティング(動かす関数を指定)→指定された動作が実行される

helloの中にurls.pyというファイルを作る

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]
    • アプリケーションのルーティング

path(”, views.index, name=’index’),で、どのファイルのどの関数が、どの場合に動作するかを指示している

”はアドレスを指定している、今回は何も無いので/helloで動く。もし何か入れれば/hello/~~って感じのアドレスで動く。<int:question_id>/というものをここに入れる事も有るのだが、ちょい難しいので割愛

views.indexでviewsのindexって関数を動かすよと宣言
一応その動きにname=’index’ってやつで属性付けしておく

# ここを見つけて書き足す!
INSTALLED_APPS = [
    'hello.apps.HelloConfig', # これを付け足す!
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
    • どのクラスを参照するか設定している

 

    • アプリケーション名がbbsならbbs.apps.BbsConfigみたいな感じで書く

 

    このBbsConfigの所はアプリケーションのapps.pyからclass ~~Configってなってる所をペーストする
# プロジェクトのディレクトリに戻って...
$ cd myapp

# Djangoを起動!
$ python manage.py runserver
    Flaskと比べると嫌になる程複雑だ…

5.调用模板(HTML)

    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # <---DIRSの中身書き込む--->
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        # <---ここまでの中身ね--->
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
    • テンプレート(html)をviews.pyから呼び出して使用する

 

    • テンプレートは取り敢えずアプリケーション直下にtemplatesってディレクトリを作り、その中にアプリケーション名ディレクトリ作成、そして中にテンプレートの配置が良い

 

    Flaskと同じ様にtemplatesの中身にしか反応しないっぽい
from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return render(request, 'hello/index.html')

return render()の中にPATHを入れる事でhtmlを指定できる

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <p>Hello WoWWoW</p>
</body>
</html>

index.htmlは取り敢えず普通に書いてもよろしい
実行結果でHello WoWWoWと表示されれば完了

从py端传输数据到模板。

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    context = {
        'message': 'Hello World',
        'players': ['勇者', '戦士', '魔法使い', '忍者']
    }
    enemy = "スライム"
    return render(request, 'hello/index.html', context ,enemy)
    • こんな感じで渡したいものをreturn render()の中に入れる

 

    渡すものをcontext ={ ~~ }の様に纏め、context1つのみをreturnの所に入れる裏技がある
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <p>{{ message }}</p>
        {% for player in players %}
            <p>{{ player }}はモンスターと戦った</p>
        {% endfor %}
    <p>{{ enemy }}</p>
</body>
</html>

{{ ~~ }}に変数名を入れる事でpy側で書いた内容を渡せる
Flaskでも書いたが、html側でpythonを使いたい時は{% ~~ %}で書く
For文やif文の場合は{% endfor %}で締めなければならない
↑ここの詳しい解説はFlask_2,3あたりのテンプレートの項目が詳しいかも

7. 最后一点

    Flaskと比べて面倒くさすぎる!
广告
将在 10 秒后关闭
bannerAds