環境の記述や実際の実装の記述が不十分なので、動けばほぼ同じような環境になるようなスクリプトを書いてみました。WindowsだったらLinuxを入れれば動くかも。
■準備(以下が最低必要です)
- pyenvに必要なもの(ビルドツール※)
- git
- wget
- sqlite3(djangoの実行に必要)
※https://github.com/pyenv/pyenv/wiki/common-build-problems
■Ubuntuでの使用例(別の環境では1.の部分が違います)
1.必要なパッケージのインストール
console
1sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
2libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
3xz-utils tk-dev libffi-dev liblzma-dev python-openssl git sqlite3
※環境によってはTIME ZONEの設定などが走ります
※gitを普通に使えるように設定してください(ユーザー名とかメアドとか)
2.空ディレクトリに下記2つのスクリプトファイルのみを入れる
3.操作中のbashからcreate_env.shを実行
※anyenvの初期化ではy
→現在のシェルの環境変数(と一部関数)と空のディレクトリの内容が変わり、ソースが完成します。myappが動く状態でサイトのDebug実行が可能です。
→一旦シェルを抜けると設定した環境変数が消えてしまうので、新しいシェルでは再度環境変数の設定が必要です。env.shを保存したディレクトリで
とすると、anyenvから設定した環境が使えます。
■スクリプトファイル
bash
1# create_env.shとして保存する
2git clone https://github.com/anyenv/anyenv ./.anyenv
3export ANYENV_DEFINITION_ROOT="$PWD/.config/anyenv/anyenv-install"
4export ANYENV_ROOT="$PWD/.anyenv"
5export PATH="$PWD/.anyenv/bin:$PATH"
6eval "$(anyenv init -)"
7anyenv install --init
8
9anyenv install pyenv
10eval "$(anyenv init -)"
11
12pyenv install 3.6.9
13pyenv global 3.6.9
14eval "$(anyenv init -)"
15
16# python3のバージョンに拘らない/他で用意できたならvenvなどでココから始めてもいい
17
18pip install django==2.2
19pip install django-bootstrap4
20pip install django-bootstrap-datepicker-plus
21
22django-admin startproject mysite
23cd mysite
24
25python manage.py startapp myapp
26
27if command -v git; then
28 git init
29 wget -O .gitignore https://github.com/github/gitignore/raw/master/Python.gitignore
30 git add .
31 git commit -m "初期コミット"
32fi
33
34patch -p1 <<EOF
35diff --git a/myapp/forms.py b/myapp/forms.py
36new file mode 100644
37index 0000000..c9f403b
38--- /dev/null
39+++ b/myapp/forms.py
40@@ -0,0 +1,15 @@
41+from bootstrap_datepicker_plus import DateTimePickerInput
42+from django import forms
43+from .models import Test_input
44+
45+class TestForm(forms.ModelForm):
46+ class Meta:
47+ model = Test_input
48+ fields = ['created_date']
49+ widgets = {
50+ 'created_date': DateTimePickerInput(
51+ format='%Y-%m-%d %H:%M:%S',
52+ options={'locale': 'ja',},
53+ attrs={'placeholder':'日付を選択してください。'}
54+ )
55+ }
56diff --git a/myapp/models.py b/myapp/models.py
57index 71a8362..1153ba2 100644
58--- a/myapp/models.py
59+++ b/myapp/models.py
60@@ -1,3 +1,5 @@
61 from django.db import models
62
63 # Create your models here.
64+class Test_input(models.Model):
65+ created_date = models.DateTimeField('作成日')
66diff --git a/myapp/templates/base.html b/myapp/templates/base.html
67new file mode 100644
68index 0000000..b027003
69--- /dev/null
70+++ b/myapp/templates/base.html
71@@ -0,0 +1,13 @@
72+<html lang="ja">
73+<head>
74+<title>テスト</title>
75+{% load bootstrap4 %} {# import bootstrap4/bootstrap3 #}
76+{% bootstrap_css %} {# Embed Bootstrap CSS #}
77+{% bootstrap_javascript jquery='full' %} {# Embed Bootstrap JS+jQuery #}
78+{{ form.media }} {# Adds date-picker required JS and CSS #}
79+</head>
80+<body>
81+{% block content %}
82+{% endblock %}
83+</body>
84+
85diff --git a/myapp/templates/form.html b/myapp/templates/form.html
86new file mode 100644
87index 0000000..7ba17b7
88--- /dev/null
89+++ b/myapp/templates/form.html
90@@ -0,0 +1,12 @@
91+{% extends 'base.html' %}
92+{% load bootstrap4 %}
93+
94+{% block content %}
95+<form method="POST">
96+{% csrf_token %}
97+{% bootstrap_form form %}
98+{% buttons %}
99+<button type="submit" class="btn btn-primary">送信</button>
100+{% endbuttons %}
101+</form>
102+{% endblock %}
103diff --git a/myapp/urls.py b/myapp/urls.py
104new file mode 100644
105index 0000000..80e3d16
106--- /dev/null
107+++ b/myapp/urls.py
108@@ -0,0 +1,7 @@
109+from django.urls import path
110+
111+from . import views
112+
113+urlpatterns = [
114+ path('', views.formfunc, name='index'),
115+]
116diff --git a/myapp/views.py b/myapp/views.py
117index 91ea44a..2fea9a4 100644
118--- a/myapp/views.py
119+++ b/myapp/views.py
120@@ -1,3 +1,7 @@
121 from django.shortcuts import render
122+from .forms import TestForm
123
124 # Create your views here.
125+def formfunc(request):
126+ form = TestForm()
127+ return render(request, 'form.html', {'form': form})
128diff --git a/mysite/settings.py b/mysite/settings.py
129index f875ab4..3f1219f 100644
130--- a/mysite/settings.py
131+++ b/mysite/settings.py
132@@ -31,6 +31,9 @@ ALLOWED_HOSTS = []
133 # Application definition
134
135 INSTALLED_APPS = [
136+ 'myapp.apps.MyappConfig',
137+ 'bootstrap4',
138+ 'bootstrap_datepicker_plus',
139 'django.contrib.admin',
140 'django.contrib.auth',
141 'django.contrib.contenttypes',
142@@ -118,3 +121,8 @@ USE_TZ = True
143 # https://docs.djangoproject.com/en/2.2/howto/static-files/
144
145 STATIC_URL = '/static/'
146+
147+# Bootstrap
148+BOOTSTRAP4 = {
149+ 'include_jquery': True,
150+}
151diff --git a/mysite/urls.py b/mysite/urls.py
152index facf6e4..1933448 100644
153--- a/mysite/urls.py
154+++ b/mysite/urls.py
155@@ -14,8 +14,9 @@ Including another URLconf
156 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
157 """
158 from django.contrib import admin
159-from django.urls import path
160+from django.urls import include, path
161
162 urlpatterns = [
163+ path('myapp/', include('myapp.urls')),
164 path('admin/', admin.site.urls),
165 ]
166EOF
bash
1# env.shとして保存する
2if ! command -v anyenv; then
3 export ANYENV_DEFINITION_ROOT="$PWD/.config/anyenv/anyenv-install"
4 export ANYENV_ROOT="$PWD/.anyenv"
5 export PATH="$PWD/.anyenv/bin:$PATH"
6 eval "$(anyenv init -)"
7fi
8
■補足
anyenvのインストール場所は通常$HOME/.anyenvですが、ここでは$PWD/.anyenvにしています。
これは
- 指定ディレクトリ以外をいじりたくない
- dockerから使う際に都合がいい
- nodenvなどで同一バージョンでもglobalインストールするパッケージを変えたい(今回使いませんが)
などの都合でそうしています。また、通常はシェルの設定ファイルもいじりますが、ディレクトリごとに環境設定そのものが違うので、スクリプトを手作業でsource実行するアプローチにしています。
※anyenvでは各種シェルに対応していますが、ここでは面倒なのでbashのみに対応しています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。