とりあえず覚えた系の事を書き殴っていくページ(随時更新)

※Pythonは3系です

Django: migration

1
2
$ python manage.py migrate
$ python manage.py migrate [マイグレーションID]

ロールバック等の、狙った位置までマイグレーションしたい場合は、[マイグレーションID]をつけて運用する
[マイグレーションID]を省略した場合は、全てのマイグレーションが適用される

1
2
3
4
5
// migration作成
$ python manage.py makemigrations [appname]

// 実行されたmigrationの確認
$ python manage.py showmigrations [appname]
1
2
// 指定のマイグレーションIDで発行されるSQLを確認する場合
$ manage.py sqlmigrate [マイグレーションID]
1
2
3
// スキーマからモデルのリバース生成
$ python manage.py inspectdb > models.py
$ python manage.py inspectdb [tablename] > models.py
  • inspectdbした時にに出たエラー

AssertionError: A model can’t have more than one AutoField.

primary_key=Trueを明示的にしていく事で解決

1
2
-    id = models.AutoField()
+ id = models.AutoField(primary_key=True)
  • makemigrationsした時に出たエラー

web.Streams.name: (fields.E121) ‘max_length’ must be a positive integer.

inspectdb後に、max_length=-1が設定されていたので、これを整数にしてね、という内容。max_lengthに整数値を設定して解決

1
2
-    name = models.CharField(max_length=-1)
+ name = models.CharField(max_length=20)

Django: test

1
2
3
// テスト
$ python manage.py test
$ python manage.py test [appname].tests.test_xxxxxxx

Django: runserver

1
2
3
4
// 開発サーバ
$ python manage.py runserver
$ python manage.py runserver 3000
$ python manage.py runserver --settings=[appname].settings

Django: collectstatic

1
2
3
4
5
// 静的ファイル
$ python manage.py collectstatic

// 入力を無しにして現存するファイルを削除
$ python manage.py collectstatic --noinput --clear

Python: 正規表現

1
2
3
4
5
6
7
8
9
import re

keyword = "bbb"
if re.compile("^aaa$").search(keyword):
print("A")
elif re.compile("^bbb$").search(keyword):
print("B")

-> B

Python: URLパース

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import urllib.parse

o = urllib.parse.urlparse("https://example.com/path/to/foo/bar/?aaa=1&bbb=2#hoge")

print(o.scheme)
-> https

print(o.hostname)
-> example.com

print(o.path)
-> /path/to/foo/bar/

print(o.path.split("/"))
-> ['', 'path', 'to', 'foo', 'bar', '']

print(o.query)
-> aaa=1&bbb=2

print(o.geturl())
-> https://example.com/path/to/foo/bar/?aaa=1&bbb=2#hoge

Django: 404 NotFoundを返す

1
2
3
4
5
6
7
8
9
10
from django.http import HttpRequest, Http404

def index(request):
assert isinstance(request, HttpRequest)

# 例: GETパラメータに、"category=python"を持ってなければ404にする(raise Http404)
if "python" == request.GET.get("category"):
return render(request, 'index.html')
else:
raise Http404

リンク(参考サイトや過去記事など)

Django マイグレーション まとめ ※超参考
Tag: Python
Tag: Django