はじめに
djangoでプロジェクトを作成後プロジェクト名を変えることがあった(普通はないと思うのですが...)ので、こちらを参考に修正したのですが、(普通はないと思いますが)またプロジェクト名を変更するようなときに同じことをやりたいくない&コードを書く練習になりそう、ということでプロジェクト名を変更してくれるプログラムを作成しました。
コード
rename_django_project.pyという名前でコードを作成しました。
以下、コード全体
rename_django_project.py
# プロジェクトディレクトリに移動してから実行する
import glob, re, os
# 現在のプロジェクト名を取得する
old_project_name = glob.glob("./*/settings.py")[0].split("/")[1]
new_project_name = input()
old_projectdir_path = "./"+old_project_name
new_projectdir_path = "./"+new_project_name
os.rename(old_projectdir_path, new_projectdir_path)
project_name_in_manage_or_wsgi = 'os.environ.setdefault.*DJANGO_SETTINGS_MODULE.,\s.*.settings.*'
project_name_in_settings = 'ROOT_URLCONF\s=\s.*|WSGI_APPLICATION\s=\s.*'
def modify_project_name_in_file(file_path, regex):
with open(file_path, "r") as file:
# old_project_nameをnew_project_nameに変更する
code = file.read()
old_names = re.findall(regex,code)
for old_name in old_names:
#old_name = f"{old_name.group()}"
new_name = old_name.replace(old_project_name, new_project_name)
code = code.replace(old_name,new_name)
print(code)
with open(file_path, "w") as file:
file.write(code)
modify_project_name_in_file("./manage.py", project_name_in_manage_or_wsgi)
modify_project_name_in_file(new_projectdir_path + "/wsgi.py", project_name_in_manage_or_wsgi)
modify_project_name_in_file(new_projectdir_path + "/settings.py", project_name_in_settings)
このコードをホームディレクトリの適当な場所に配置してaliasを登録しておけば気軽にプロジェクト名の変更ができます。
作成してみて
正規表現の書き方やpythonでのファイルの読み書きがよくわかってないなと再認識したので機会があるときはこういうコードを書いて練習してみようと思いました。