読者です 読者をやめる 読者になる 読者になる

Ubuntu12.04のCobblerWebInterfaceをDjango1.4に対応させる

devstackでOpenStackの開発環境をインストールしたタイミングでうっかりDjangoが1.4になってしまった...その影響でCobblerWebInterfaceが動かなくなってしまったので、ちょいちょい修正してDjango1.4に対応させたときのメモ。


CSRF対策関連が変更されているのが原因。


他にもいろいろな対応方法があると思うけれど、今回は以下の3つのファイルを修正した。


1. /usr/share/cobbler/web/settings.py

--- settings.py.org	2012-08-11 19:50:30.631347811 +0900
+++ settings.py	2012-08-11 22:32:49.393328254 +0900
@@ -36,14 +36,14 @@
 # code config
 
 TEMPLATE_LOADERS = (
-    'django.template.loaders.filesystem.load_template_source',
-    'django.template.loaders.app_directories.load_template_source',
+    'django.template.loaders.filesystem.Loader',
+    'django.template.loaders.app_directories.Loader',
 )
 MIDDLEWARE_CLASSES = (
     'django.middleware.common.CommonMiddleware',
-    'django.contrib.csrf.middleware.CsrfMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
 )
 ROOT_URLCONF = 'urls'

2. /usr/share/cobbler/web/cobbler_web/views.py

--- views.py.org	2012-08-11 21:51:58.318406264 +0900
+++ views.py	2012-08-11 22:34:03.622511091 +0900
@@ -1148,7 +1148,7 @@
     return False
 
 def login(request, next=None):
-    return render_to_response('login.tmpl', {'next':next})
+    return render_to_response('login.tmpl', context_instance=RequestContext(request, {'next':next}))
 
 def do_login(request):
     global remote


3. /usr/share/cobbler/web/cobbler_web/templates/login.tmpl

--- login.tmpl.org	2012-08-11 22:08:04.773729578 +0900
+++ login.tmpl	2012-08-11 22:08:36.234232908 +0900
@@ -11,7 +11,7 @@
 {% if form.errors %}
     <p class="error">Sorry, that's not a valid username or password</p>
 {% endif %}
-    <form action="/cobbler_web/do_login" method="post">
+    <form action="/cobbler_web/do_login" method="post">{% csrf_token %}
       {% if next %}<input type="hidden" name="next" value="{{ next|escape }}" />{% endif %}
       <div id="username">
         <label for="username">Username: </label>