Qstairs

現役AIベンチャーCTOの知見、画像認識(人工知能、Deep Learning)を中心とした技術ノウハウをアップしていきます

広告

【Django】サーバへのデプロイ時に気を付けること(Invalid HTTP_HOST header等)

f:id:qstairs:20160601221351j:plain

はじめに

ローカル環境でWEBアプリを作成し、
さあ、サーバにデプロイだ!
というときに気を付けることを書きます。
#実際に私が引っ掛かってます...


1. サーバ起動のコマンドはいつもと違う
2. 設定ファイルに一手間

1. サーバ起動のコマンドはいつもと違う

ローカルで動かす場合、以下を実行しておけば問題ありませんでした。

python manage.py runserver

ただ、実際に外部サーバで動かす場合は、
以下のように「0.0.0.0:8000」を加える必要があります。

python manage.py runserver 0.0.0.0:8000

2. 設定ファイルに一手間

サーバも起動したことだし、
WEBアプリを確認してみよう
とアクセスすると...

f:id:qstairs:20170830234748p:plain

なんじゃこりゃですね。(^^;

そんな時は、

プロジェクト名/settings.py

の中にある、

ALLOWED_HOSTS = []

を以下のように変更して更新するとちゃんとアクセスできるようになります。

ALLOWED_HOSTS = ['サーバのアドレス', 'localhost', '127.0.0.1']

最後に

今回はデプロイ時の注意点を紹介しました。
今まさに私が作ったWEBアプリをデプロイ中なのでいろいろ躓いている最中です。
さらに気を付けることが判明した時は更新していきます。

以上。

【Django】HTMLのfor文でカウントアップ

f:id:qstairs:20160601221351j:plain

Djangoで開発していますが、
forの中でカウントアップする方法を試行錯誤していました。

30分ぐらい調べたり実装したりしましたが
ようやく実現方法を見つけたので備忘録

{% for item in items %}
  {{ forloop.counter }}    #先頭(1)から1ずつカウントアップしてくれる
  {{ forloop.revcounter }} #末尾から1ずつカウントダウンしてくれる
{%endfor%}

知っていれば一発ですね...

以上

【関連記事】
qstairs.hatenablog.com
qstairs.hatenablog.com
qstairs.hatenablog.com

【Django】Modelから条件に合ったオブジェクトを取得する場合の注意点(filter,get)

f:id:qstairs:20160601221351j:plain

DjangoのModel (django.db.models.Model) で定義したクラスにおいて、
条件に合ったオブジェクトを取得する際、

リスト(複数個)を取得する場合は「filter

一つだけ取得する場合は「get

を使用する。


「get」で条件に合ったオブジェクトが複数個存在する場合、

MultipleObjectsReturned

という例外が発生する

以上

【Django】ログイン処理

f:id:qstairs:20160601221351j:plain

Djangoで簡単なログイン処理について備忘録


とりあえずソースコードは以下

# views.py

def login(request):
  try:
    m = Member.objects.get(username=request.POST['username'])
  except Member.DoesNotExist:
    return render(request, 'login.html', {'response':-2})

  if m.password == request.POST['password']:
    request.session['member_id'] = m.id
    return render(request, '次の画面へ')
  else:
    return render(request, 'login.html', {'response':-1})


処理の流れは以下

ログイン画面で入力したusernameが
Memberテーブルに存在すればMemberオブジェクトを取得
Memberテーブルになければ
except Member.DoesNotExist:
で例外をキャッチし、ログイン画面にエラーコードを返す

Memberオブジェクトを取得後、
ログイン画面で入力したpasswordがMemberのパスワードと一致すれば
セッションにIDを登録して次の画面へ
一致しなければ
ログイン画面にエラーコードを返す


Django記事】
qstairs.hatenablog.com
qstairs.hatenablog.com
qstairs.hatenablog.com

【Django】UnicodeEncodeError: ‘ascii’ codec can’t encode characterが出たら

f:id:qstairs:20160601221351j:plain

Djangoでmodelsで定義しているモデルで日本語を使うと
以下のエラーが出る場合があります。

UnicodeEncodeError: ‘ascii’ codec can’t encode character

その場合は、モデルに

def __unicode__(self)

を追加しましょう。

def __str__(self)だけだとだめみたいです。


Django記事】
qstairs.hatenablog.com

qstairs.hatenablog.com

【Django】サイト内でのユーザIDの保持について

f:id:qstairs:20160601221351j:plain

Webサイトでは必須のユーザIDの保持について、
Djangoでの方法を備忘録。


セッションの使い方 — Django 1.4 documentation


下記は上記サイトから引用

ログイン時にユーザのIDを保持し、
ログアウト時に削除する

def login(request):
    m = Member.objects.get(username__exact=request.POST['username'])
    if m.password == request.POST['password']:
        request.session['member_id'] = m.id
        return HttpResponse("You're logged in.")
    else:
        return HttpResponse("Your username and password didn't match.")

def logout(request):
    try:
        del request.session['member_id']
    except KeyError:
        pass
    return HttpResponse("You're logged out.")
広告