Pythonプログラミング入門・サンプル・チュートリアル

Pythonプログラミング入門・サンプル・チュートリアル

【Pythonプログラミング入門】Djangoでモデル取得時にソートする

モデルクラスはobjectsという名前でManagerクラスを持っている。
このobjectsに対して、order_byメソッドを実行することでソートできる。

Blogというモデルクラスがあり、dateというプロパティをもっているとする。
その場合下記のようにソートする。

昇順

Blog.objects.order_by('date')

降順

プロパティ名に'-'をつける。

Blog.objects.order_by('-date')

【Pythonプログラミング入門】画像をリサイズする

画像処理ライブラリのPillowを使います。

# 画像のリサイズ
import os
from PIL import Image

# 画像のパス
img_path = 'cat.jpg'

# Imageオブジェクトの生成
img = Image.open(img_path)

# リサイズ
resized_img = img.resize((150, 150))

# 保存
resized_img_path = os.path.join(train_cats_dir, 'cat.999_resized.jpg')
resized_img.save(resized_img_path)

jupyter notebookを使っている場合は下記コードで確認できます。(150, 150)になっていることも確認できます。

# 表示
import matplotlib.pyplot as plt
plt.imshow(resized_img)

f:id:fjswkun:20180729124026p:plain

【Pythonプログラミング入門】画像をNumPyのarrayに変換する

画像処理ライブラリのPillowを使います。
PillowのImageオブジェクトに変換し、それをNumPyのarrayに変換します。

import numpy as np
from PIL import Image

# 画像のパス
img_path = 'cat.jpg'

# PillowのImageオブジェクトの生成
img = Image.open(img_path)

# ImageオブジェクトをNumPyのarrayに変換
img_array = np.asarray(img)

jupyter notebookを使っているようであれば、matplotlibを使って画像を表示して確認できます。

import matplotlib.pyplot as plt
plt.imshow(img_array)

f:id:fjswkun:20180728194302p:plain

【Pythonプログラミング入門】djangoでYAMLで作成したFixtureを使う

Fixtureを使うための流れ

  1. YAMLファイルを作成
  2. YAMLの配置
  3. Fixtureのロード

手順

YAMLファイルを作成

拡張子は「yaml」で作成する。「yml」だとFixtureデータロード時にエラーになる。

- model: board.category
  pk: 1
  fields:
    name: 経済
- model: board.category
  pk: 2
  fields:
    name: エンタメ

YAMLの配置

「プロジェクト/アプリケーション/fixtures」フォルダに作成したYAMLを配置する

Fixtureのロード

python3 manage.py loaddata <Fixture名>

Fixture名には拡張子を指定するは必要ない。

「CommandError: No fixture named '<Fixture名>' found.」となる場合

自分の場合、下記2つの理由で失敗しました。

  • YAMLの拡張子が「yaml」でない
  • pyyamlがインストールされていない

拡張子を直し、pyyamlをインストールしたら、ロードできました。

pyyamlをインストールについて

pip3 install pyyaml

【Pythonプログラミング入門】海外の株価データ取得API

株価データ取得先

このサイトで公開されているAPIで株価データを取得できます。 iextrading.com

※日本の株式市場に上場されている株価データは取得できるかわかりませんでした。

株価データ取得サンプル

Pythonで書いています。

import requests

# AAPLはアップルの株価コード
url = "https://api.iextrading.com/1.0/stock/AAPL/quote"

result = requests.get(url)
print(result.json())

こんな感じでいろいろなデータが取得できます。 f:id:fjswkun:20180512150859p:plain

他のAPIについて

こちらでドキュメントがありました。

iextrading.com

【Pythonプログラミング入門】Djangoのフォームでカスタムのバリデーションをする

はじめに

HTMLのフォームで入力された内容のバリデーションにFormクラスが使用されます。クラス変数で定義された内容で入力有無、文字数などの単純なバリデーションをしてくれます。それ以外のアプリケーション独自のバリデーションを行いたい場合があります。そのときはFormクラスにメソッドを追加することで実現することができます。

カスタムのバリデーション

Formクラス(サブクラス)はクラス変数で定義されているバリデーションを行なった後、clean_という名前のメソッドを実行する。はクラス変数名が入る。

  • クラス変数にemail変数が定義されている場合
  • abcd@example.comまたはefgh@example.com以外は不正とする場合
from django import forms

class CustomForm(forms.Form):
    email = forms.CharField(max_length=100)

    # デフォルトのバリデーションが行われた後に下記のバリデーションが行われる
    def clean_email():
        email = clean_data['email']
        if email in ['abcd@example.com', 'efgh@example.com']:
            return email
        else:
            raise forms.ValidationError('this email is invalid')

【Pythonプログラミング入門】Djangoでstartprojectコマンド使わずにHello Worldを作る

はじめに

Django公式のチュートリアルを読んで、startprojectコマンドやstartappコマンドを読んでいて、これらのコマンドは何をやっているのだろう?これらのコマンドを使わないとWebアプリを作れないのかな?と思っていました。

下記の書籍の第1章を読んで、startprojectコマンドを使わなくても、Webアプリが作れることがわかりました。

Lightweight Django

Hello worldサンプル

Hello worldを表示するのに必要なこと - view関数(view.pyがやっていること) - URLとView関数の紐付け(urls.pyがやっていること) - 設定(settings.pyがやっていること) - 起動(manage.pyがやっていること)

ソース

# hello_world.pyファイル
import sys

from django.conf import settings


# 設定(settings.pyがやっていること)
settings.configure(
    DEBUG=True,
    SECRET_KEY='thisisthesecretkey',
    ROOT_URLCONF=__name__,
    MIDDLEWARE_CLASSES=(
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ),
)

from django.conf.urls import url
from django.http import HttpResponse

# view関数(view.pyがやっていること)
def index(request):
    return HttpResponse('Hello World')

# URLとView関数の紐付け(urls.pyがやっていること)
urlpatterns = (
    url(r'^$', index),
)

# 起動(manage.pyがやっていること)
if __name__ == "__main__":
    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

実行

python3 hello_world.py runserver

http://127.0.0.1:8000にアクセスすると、「Hellow World」と表示されます。

学習書籍