2020年6月29日月曜日

django-CMS SQLite3をMySQLに変更する

以下を参考に、Django(django-CMS)のSQLite3 DBデータを dump してやってみましたが、どうもエラーが発生してうまくいきません。

SQLite3のデータをdumpしてMySQLに移行する
https://qiita.com/nnsnodnb/items/9e99e7f0ca3f82bf2171%C2%A0%C2%A0


そこで、以下のようにjsonファイルでエクスポート/インポートしたらできました。

1.仮想環境に入ってから以下を実行する。
(venv)$ python manage.py dumpdata > datadump.json

2.MySQL内にDBをCREATEしておきます。
mysql > CREATE DATABASE dbname CHARACTER SET utf8mb4;

3.次にsettings.pyを編集してDBをMySQLに変更します。
  ※先にMySQL内にインポートするDBをCREATEしておくのを忘れないようにします。

4.Migrateします。
(venv)$ python manage.py migrate

※このままでloaddataをするといかのようなエラーが発生するので、手順4のようにContentTypeを削除します。
django.db.utils.ProgrammingError: Problem installing fixture '/xxx/myproject/datadump.json': Could not load contenttypes.ContentType(pk=1): (1146, "Table 'dbname .django_content_type' doesn't exist")

5.Pythonのシェルに入ります。
(venv)$ python manage.py shell

そして以下を実行します。
>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().delete()
>>> quit()

6.データをインポートします。
(venv) $ python manage.py loaddata datadump.json


これでOKでした。

参考
What's the best way to migrate a Django DB from SQLite to MySQL?

2020年6月11日木曜日

Django urls.py 単純なリダイレクトの方法

Djangoで以下のようにリダイレクトしたい場合の設定方法

example.co.jp/abc/ ⇒ example.co.jp/xyz/
example.co.jp/abc/aiueo/ ⇒ example.co.jp/xyz/aiueo/

urls.py

from django.views.generic.base import RedirectView

urlpatterns = [

    url(r'^abc/(?P<path>.*)$', RedirectView.as_view(url='/xyz/%(path)s')),

]


Django 2.0以降のパスコンバーターを使った場合は以下ですが、
/abc/の後ろが空の場合が対応できない。
example.co.jp/abc/ ⇒ example.co.jp/xyz/ ×

from django.urls import path

urlpatterns = [

    path('abc/<path:pathstrings>', RedirectView.as_view(url='/xyz/%(pathstrings)s')),
# abc/以降が空の場合の以下を追加して対応
path('abc/', RedirectView.as_view(url='/xyz/')),
]

日本発のサーバーレスアプリケーション開発向けフレームワーク『Jeffy』を試したので紹介する - Sweet Escape

Vue.jsのサイトジェネレータGridsomeが最高かもしれない - Sweet Escape