Pythonのメモ一覧
Pythonのメモが多くなってきたため、整理
基礎
標準モジュール
文字列
- Python 3 文字列
- 文字列を指定の文字で分割する - Python
- 文字の空白を取り除く
- 文字列の先頭と末尾から指定した文字を取り除く - Python
- 文字列の初めのほうが指定の文字列か str.startswith() - Python
- strとbytes
組み込み関数
ファイル
サードパーティーモジュール
requests
Webフレームワーク
Bottle
Djngo
小技
エラー解決
やってみた
環境・Pythonの知識
DjangoのURLconfについて
DjangoのURLディスパッチャについて調べたときのメモ
Djangoでの あるリクエストに対してどのビューを返すか という仕組みを理解することが目的。
→理解できた!!
以下のようなmysite_url_disp
というプロジェクトの中にmyapp
というアプリケーションがあったとする。
$ tree mysite_url_disp/ mysite_url_disp/ ├── manage.py ├── myapp │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py └── mysite_url_disp ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-36.pyc │ └── settings.cpython-36.pyc ├── settings.py ├── urls.py └── wsgi.py
URLディスパッチャ
あるURLに対してどのビュー関数を返すかを設定する。
DjangoのURLディスパッチャはURLconfという設定ファイルに記述することになっている。DjangoではURLconfはurls.py
というファイルに記述する。
リクエストからレスポンスまでの流れ
URLconf(urls.py
, URLディスパッチャの設定ファイル)の役割
URLconfの役割はviews.py
内に定義されているview関数とURLのパターンの対応付けを行うこと
views.py内にview関数が記述されていても、URLconfに記述されていないとページは表示されない。
URLconfは2種類ある
mysite_url_disp/urls.py
にすべてのURLconfを書くことはできるが、アプリケーションごとにURLconfを作ると管理がしやすくなる。
URLconfはプロジェクト用とアプリケーション用の2つを作ること!
- プロジェクト用のURLconf:
mysite_url_disp/urls.py
- アプリケーション用のURLconf:
myapp/urls.py
views.py
の役割
view関数を記述し、リクエストに対してのレスポンスを返す
views.py配下のように記述した
from django.shortcuts import render from django.http.response import HttpResponse def index_page(request): return HttpResponse('This is url test.')
(views.py
についてはここ以外のところで12/3(日)に調べてまとめる)
URLconfにURLディスパッチャを記述する
まずは、アプリケーションのURLconf(myapp/urls.py
)にURLディスパッチャを設定する
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index_page, name='index_page'), ]
views.py
の中に定義されているindex_page()
関数を index_page という名前で urlpatterns のリストに追加する
次に、プロジェクトのURLconf(mysite_url_disp/urls.py
)にURLディスパッチャを設定する
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', include('myapp.urls'), name='myapp'), ]
URLが index/
で始まるとき(http://127.0.0.1:8000/index/ や http://127.0.0.1:8000/index/hello など)、myappのurlsの中に定義されているurlpatternsを見に行くということになる
アクセスしてみる
python manage.py runserver
http://127.0.0.1:8000/index/ にアクセスしてみると、views.pyのindex_page()に記述した文字列が表示される。
urlpatternsについて
urls.py
内にurlpatternsというものがある
これはDjangoによって、URLにマッチする定義があれば、そのview関数を呼び出すという動作をする。ページを追加するときにはurlpatternsにURLパターンを追加する!
urlpatternsについてわかったかも!
それぞれのURLconf内のurlpatterns
が以下のようになってたとする
# myapp/urls.py urlpatterns = [ url(r'^$', views.index_page, name='index_page'), url(r'^hello', views.hello_page, name='hello_page'), ]
# mysite_url_disp/urls.py urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', include('myapp.urls'), name='myapp'), ]
リクエストのURLによって、動作が変わる
- http://127.0.0.1:8000/polls/ : views.py内の
index_page()
が呼ばれる。 - http://127.0.0.1:8000/polls/hello : views.py内の
hello_page()
が呼ばれる。
参考文献
親クラスフォームで定義したメソッドを子クラスフォームでオーバーライドし、親側で子側で実装したメソッドを実行する - VB.net
まず、やりたい事は、以下のようなこと
キーイベントの処理を親クラスに定義しておき、子クラスでは、親クラスに定義されているメソッドをオーバーライドするだけで、「ボタンクリック時」と「キー押下時」の処理をまとめる。
これが今の自分の最善策だと思う。
ポイント
親クラス側(RootForm)
- 親クラスの
KeyUp
イベント発生時のメソッド(RootForm_KeyUp()
)定義内で、子クラスがオーバーライドしたメソッド(F1Process()
とF2Process()
)を呼ぶこと - 子クラス側での
KeyUp
イベント発生時に子クラスのオブジェクトを取得すること - 子クラスにオーバーライドしてもらうメソッドは
Public
で定義すること- こうしないと、親側から子側でオーバーライドされたメソッドを呼び出すことができない(と思う)
子クラス側(Form1)
- 親側のメソッド(
F1Process()
とF2Process()
)をオーバーライドすること- こうすることで、親側で定義された
KeyUp
イベント発生時に処理を実行できる
- こうすることで、親側で定義された
- ボタンクリック時にオーバーライドしたメソッドを呼ぶこと
これで、キー押下時のイベントは意識せずにボタンクリック時の処理を記述することができる!!(?)
From1.vb
Public Class Form1 Public Overloads Sub F1Process() MsgBox("F1!!!!") End Sub Public Overloads Sub F2Process() MsgBox("F2!!!!") End Sub Private Sub ButtonF1_Click(sender As Object, e As EventArgs) Handles ButtonF1.Click ' F1ボタンクリック時にもF1押下時と同じ処理を呼び出す F1Process() End Sub Private Sub ButtonF2_Click(sender As Object, e As EventArgs) Handles ButtonF2.Click ' F2ボタンクリック時にもF2押下時と同じ処理を呼び出す F2Process() End Sub End Class
RootForm.vb
Public Class RootForm Private Sub RootForm_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp ' 子フォームのFnProcess()を呼ぶため Dim form = CTypeDynamic(sender, sender.GetType()) Select Case e.KeyCode Case Keys.F1 form.F1Process() Case Keys.F2 form.F2Process() End Select End Sub ''' <summary>F1キー押下時、F1ボタンクリック時の処理</summary> Public Overridable Sub F1Process() ' オーバーライドしてください End Sub Public Overridable Sub F2Process() ' オーバーライドしてください End Sub End Class
参考文献
Conversion.CTypeDynamic Method (Microsoft.VisualBasic) | Microsoft Docs
gitignoreで特定のファイル以外のファイルを無視する
/temp/* !/temp/temp2/ /temp/temp2/* !temp/temp2/bin/ temp/temp2/bin/* !temp/temp2/bin/Debug/ temp/temp2/bin/Debug/* !temp/temp/bin/Debug/message.xml