TomoProgの技術書

底辺プログラマーが達人プログラマーになるまで

Djangoを使って掲示板を作ってみる Part1

皆さん
こんにちは、こんばんは
TomoProgです。

Djangoを使って掲示板を作ってみる Part0を書いてから3日ほど経過しました。
そろそろPart1を書こうと思います。

それでは頑張っていきましょう。

掲示板に必要なページを考える

まずは掲示板に必要なページを考えていきます。
とりあえず、思いついたものをどんどん書いていきます。

1. トピックの一覧ページ
2. トピックの内容を一覧できるページ
3. トピックを作成するページ
4. トピックの内容に対して返信するページ
5. 使い方の説明をするページ
6. お問い合わせページ
7. ログインページ

かなり大雑把ですが、とりあえずこの7ページを作れば掲示板としては機能しそうかなと思いました。
作っていく間にこれも必要、あれも必要となった場合は臨機応変にいきましょう。

DBを設計する

とりあえず、DBも大雑把に設計してみます。
djangoのmodels.pyに定義した内容は以下の通りです。

from django.db import models

# Create your models here.
class Topic(models.Model):
    """ Topic Table """
    title = models.CharField(max_length=500)
    register_name = models.CharField(max_length=20)
    register_datetime = models.DateTimeField()
    update_name = models.CharField(max_length=20)
    update_datetime = models.DateTimeField()

    def __str__(self):
        return self.title

class TopicDetail(models.Model):
    """ TopicDetail Table """
    title = models.ForeignKey(Topic, on_delete=models.CASCADE)
    text = models.TextField()
    register_name = models.CharField(max_length=20)
    register_datetime = models.DateTimeField()
    update_name = models.CharField(max_length=20)
    update_datetime = models.DateTimeField()

    def __str__(self):
        return self.title

Topicという親テーブルとそれに紐づくTopicDetailという子テーブルを作りました。
Topicテーブルの一覧を表示するページからトピックを選択することで、TopicDetailの内容を表示するページに遷移するようにイメージして作ってみました。

DBに関しても別のテーブルが必要になったり、テーブルのフィールドや属性を変更したくなった時は随時変更していきます。

とにかくざっくり動くものを目指して作っていきます!!

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

Vimで「;」(セミコロン)を使ってみる

皆さん
こんにちは、こんばんは
TomoProgです。

今日はVimで「;」(セミコロン)の使い方を知らなかったので、ここに書いておこうと思います。

例えば以下の様な例文があったとしましょう。

My favorite programming language is python!!

カーソルが先頭にあったとして、programmingの「p」にカーソルを移動させたいときはどうすればいいでしょうか?

地道に「l」を押して右にカーソルを移動させてもいいですが、今回の例文では「fp」と入力すると瞬時に移動できます。

「f」を押してから任意のキーを押すことで、現在のカーソル位置から前方検索を行い、マッチした場所にカーソルを移動させることが出来ます。

ここまでは知っていたのですが、ここからさらに次の「p」に移動しようと思った時、もう一度「fp」と入力しないと移動できないとずっと思っていました。

しかしそんな面倒なことはしなくていいです。
なぜなら、
「;」を押すことで直前の「f」コマンドを繰り返す事が出来ますから!!

今まで「.」コマンドでなんで「f」コマンドを繰り返せないんだろうと思っていたのですが、「;」だったのですね・・・

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

Djangoを使って掲示板を作ってみる Part0

皆さん
こんにちは、こんばんは
TomoProgです。

GWも最終日となりました。
皆さんはどのように過ごしましたか?

私は3泊4日で福岡に旅行に行ってきました!!
博多ラーメン、モツ鍋も食べれたし、太宰府にも行けたので、満足いく九州旅行でした。

それはさておき、前のブログでDjangoを使ってWebアプリを作るという目標を掲げたので、どんなWebアプリを作るのかをここに書いておこうと思います。

それでは頑張っていきましょう。

どんなWebアプリを作るの?

まずはどんなWebアプリを作るのかですが、
Python質問掲示板」
を作成したいと思います。

質問掲示板と書いてありますが、基本的にPythonに関する情報なら何でも有りにしようと思います。

なんで作ろうと思ったの?

理由としては、

  1. Pythonの情報は英語が多いので、日本語でも気軽に情報交換できるサイトが欲しい。
  2. PHPPerlを用いた掲示板作成は多いが、Python掲示板を作ったという情報は見かけない。
  3. 掲示板作成を通じて、Djangoの使い方やDB設計などを経験し、自分自身のスキルを磨く。

それらしいことを理由としてあげていますが、
作ってみたいなと思ったから作る。
これが全てだと思います!!

期間は?

2ヶ月を目標にしようと思います。

最後に

実は一度掲示板を作成しましたが、挫折しました。
今回はとにかく動くものを目指して頑張っていこうと思います。

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

Django + Apache + mod_wsgiでWebサーバを構築してみた

皆さん
こんにちは、こんばんは
TomoProgです。

気がつけばもう4月も最終日。
この4月に書いた記事数を見てみると、

YouTubeを禁止した記事しか書いてなかったんですね。

毎日書くと言っていた日々は何だったのか。
もうそんなことは知りません。笑

長々とした前置きは置いておき、
今回はUbuntuDjangoApache、mod_wsgiを使ってWebサーバを構築してみました。

それでは頑張っていきましょう。

DjangoApache?mod_wsgi

そもそも、DjangoApache、mod_wsgiってなんぞやという人も多いと思うので、自分の整理のためにも簡単に説明してみようと思います。

  • Django(ジャンゴ)とは

DjangoPythonで書かれたWebフレームワークの1つです。
PythonのWebフレームワークは数多く存在しますが、その中でもフルスタックのWebフレームワークなのが特徴的で、Webアプリを作成するために必要な機能はDjangoだけでほぼ実装できるみたいです。
かなり多くの機能を提供してくれるのですが、なんと無料で使用できます。
ちなみに読み方は「ジャンゴ」です。
「ディージャンゴ」と読んだ人は私と同レベルです。笑

  • Apache(アパッチ)とは

Webサーバソフトウェアの1つです。
ほとんどのWebサービスはこのApacheで動いているのではないかと思っています。
初版は1995年に公開されたらしいです。
20年以上経った今でも多くの人が使用しているのは驚きですね。
ちなみにApacheDjangoと同じで無料で使えます。

  • mod_wsgi(モッドウィズギィ)とは

mod_wsgiPythonプログラムをApache上で動作させるために必要なモジュールです。
ApacheDjangoで作ったWebサービスを公開するときに使用します。
こちらも無料で使用可能です。

必要なものをインストールする

さて、使用するソフトやモジュールの紹介も終わったので、早速Ubuntuにインストールしていきましょう。

まずは、WebサーバソフトウェアであるApacheをインストールします。
ターミナルを開いて、以下のコマンドを入力します。

$ sudo apt-get update
$ sudo apt-get install apache2
$ sudo apt-get install apache2-dev

構築した環境にブラウザからアクセスして以下のようなサイトが出てきたらApacheのインストールは完了です!!
f:id:TomoProg:20160430111459j:plain

次はDjangoをインストールしていきましょう。
Djangoは仮想環境で構築したいので、毎回お世話になるvirtualenvを入れていきます。

$ sudo apt-get install python3-pip
$ sudo pip3 install virtualenv

virtualenvがインストールできたところで、仮想環境を作成し、仮想環境に入っておきます。
WebAppの部分は任意で構いません。

$ virtualenv --no-site-packages WebApp
$ cd WebApp
$ source bin/activate

(WebApp)がターミナルの先頭に表示されれば仮想環境に入れている状態です。
(virtualenvコマンドでWebAppの部分を変更した人はその変更した名前になっていればOKです。)

さて、仮想環境も出来たので、Djangoをインストールします。
と言っても仮想環境内でたった一行入力するだけです。

$ pip install django

djangoがインストール出来たかどうかはインタラクティブシェルを起動して、以下のコードを入力します。

>>> import django
>>> django.get_version()

インストールしたdjangoのバージョンが表示されればOKです。

  • mod_wsgiをインストール

あとはmod_wsgiに関するモジュールをインストールしていきます。
こちらも仮想環境内でインストールします。

$ pip install mod-wsgi
$ pip install mod-wsgi-httpd

インストールに少し時間がかかるので、気長に待っていてください。

これで必要なものはすべてインストール完了です。

Djangoを使ってWebアプリを作成する

必要なものをすべてインストールしたので、次はDjangoを使用した時に出力されるIt Worked!のページを出力してみます。

まずは、仮想環境内でDjangoプロジェクトを作成します。
mysiteの部分は任意のプロジェクト名で構いません。

$ django-admin startproject mysite

プロジェクトのディレクトリが作成されていれば成功です。

あとは上記で作成したDjangoプロジェクトを以下のコマンドで80番ポートで起動させます。

$ cd mysite
$ sudo ../bin/mod_wsgi-express start-server --port=80 --user=djangowebserver mysite/wsgi.py

userに指定するユーザはログインしているユーザの名前を入れておけば大丈夫みたいです。

もし、Apacheが起動している場合は80番ポートが既に使用されているためエラーになると思います。
その場合は以下のコマンドでApacheを一度止めてから、上のコマンドを試してみてください。

$ sudo service apache2 stop

さて、ブラウザでアクセスしてみると・・・
f:id:TomoProg:20160430140445j:plain

It Worked!!
Djangoが80番ポートで起動出来ました!!

まとめ

Django + Apache + mod_wsgiを使ってWebサーバを構築出来ました。
これを使って何かWebアプリを作成する予定です。

Djangoは公式ドキュメントも充実しているので、Python使っている人でWebフレームワーク使いたいという人はDjangoを使ってみてはどうかと思います。

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

YouTube禁止令を発動してみた

皆さん
こんにちは、こんばんは
TomoProgです。

前回書いたブログが3月20日
今日は4月3日。

久しぶりの更新です。

今週一週間は頑張ろうとか書いた記事は完全に意味が無かったですね。
過ぎたことは流しておきましょう・・・

それはさておき、

今回はChrome拡張機能YouTubeを禁止してみました。

それでは頑張っていきましょう。

Chrome拡張機能を勉強する

まずはChrome拡張機能を自分で作れないと話にならないので、勉強することにしました。

勉強にはドットインストールの動画を使用するのが効果的でした。
http://dotinstall.com/lessons/basic_chrome_v2dotinstall.com

Chrome拡張機能には目的に合わせて4つの機能があるみたいです。

・Browser Action
ツールバーに常駐し、いつでも起動することが出来る
・Page Action
特定のページで起動することが出来る
・Content Scripts
特定のページで自動で実行する
・Context Menu
右クリックメニューから起動することが出来る

これら4つの機能すべてを動画で簡単に説明しているので、動画を一通り見れば簡単な拡張機能は作れるようになると思います。

どんな拡張機能を作るか考える

さて、勉強が終わったところで、どんな拡張機能を作るかを考えてみます。

私が思いついた禁止する方法は、

  • YouTubeのサイトを開けなくする。
  • YouTubeのサイトを開いたときに自動で違うページに飛ばしてしまう。

この2つでした。

今回は後者の機能を実装してみたいと思います。

実際に作ってみる

勉強も終わり、実装したい機能も考えたので、あとは実際に作るだけです。

自動で違うページに飛ばす方法が良く分からなかったので、以下のサイトを参考にさせていただきました。
stackoverflow.com

以下の3つのスクリプトが今回の拡張機能に使用するスクリプトです。

manifest.json

{
    "name": "Stop YouTube",
    "version": "0.1",
    "manifest_version": 2,

    "description": "YouTubeのサイトを開くとGoogleホームページへ飛びます。",

    "permissions":[
        "tabs"
    ],

    "background": {
        "scripts": ["background.js"]
    },

    "content_scripts": [
        {
            "matches": ["https://www.youtube.com/*"],
            "js": ["myscript.js"]
        }
    ]
}

background.js

chrome.runtime.onMessage.addListener(function(request, sender) {
    chrome.tabs.update(sender.tab.id, {url: request.redirect});
});

myscript.js

chrome.runtime.sendMessage({redirect: "https://www.google.com"});

manifest.jsonChrome拡張機能のタイトルなどのメタ情報を書いておくjsonファイルです。

基本的にはbackground.jsに指定したページへ移動させるスクリプトを書いておき、myscript.jsに移動したいURLを記述しておきます。

また、myscript.jsが起動するサイトはmanifest.jsonのmatchesに指定したサイトにアクセスしたときに起動するようにしています。

文章にしてみるとあまり詳しいことは分かっていないことが露呈しますね・・・。

あとは上記の3つのスクリプトを一つのフォルダにまとめて、Chrome拡張機能として追加するだけで、簡単にYouTubeを開いたときにGoogleのホームページに飛ばすことができました。

まとめ

今日はChrome拡張機能を自作してみました。

これでYouTube生活からおさらば出来ると信じています。

拡張機能をOFFにしなければ・・・

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

今週は頑張ろうかな

皆さん
こんにちは、こんばんは
TomoProgです。

前回書いたブログが3月12日。
気付けば約1週間ほど放置状態でした。

なぜなら・・・

書くネタが全く思い浮かばなかったから!!

1週間放置してネタが思いついたわけではありませんが、今週はブログ更新できるように頑張ろうと思います。

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

Vimに自作コマンドを組み込んでみた

皆さん
こんにちは、こんばんは
TomoProgです。

今回は私がPythonのプログラムを書き始めるときに、ほぼ毎回書くコードをVimコマンドで自動入力できるようにしてみました。

それでは頑張っていきましょう。

毎回同じことを書くのは面倒くさい

私がPythonのプログラムを書いているとほぼ毎回書くコードがあります。
それがコチラ

#-*- coding:utf-8 -*-

def main():

if __name__ == "__main__":
    main()

コマンドラインから実行した際に、main関数からプログラムがスタートするように、このコードをほとんどのPythonプログラムで書きます。

1度や2度書くくらいなら何とも思わない量なのですが、Pythonプログラムを作るたびに、毎回毎回書くのは面倒です。

というわけで、この6行をVimのコマンドで入力できるようにしてみます!!

自作コマンドをVimScriptで作成する

Vimで自作コマンドを作る場合はVimScriptというVim専用のスクリプトを使用します。
他のプログラム言語を触ったことがある人は割りと簡単に習得出来そうです。

それでは早速、VimScriptで自作コマンドを作っていきます。

私が作成したコマンドがコチラ

:command! -nargs=1 PyTemplate call PyTemplateFunc(<f-args>)

function PyTemplateFunc(template)
    if a:template == "main"
        :r ~/.vim/mycmd/py_template/main.py
    elseif a:template == "docstr" || a:template == "ds"
        :r ~/.vim/mycmd/py_template/docstr.py
    else
        echo("Nothing Python Template.")
    endif
endfunction

1行目の:commandで始まる行がコマンドを定義している部分です。
今回はPyTemplateという名前でコマンドを定義しました。
コマンドを実行すると、PyTemplateFunc関数が呼び出されるようになっています。

PyTemplateFunc関数の中身を見てみましょう。
templateの中身(PyTemplateコマンドに渡した引数)がmainであれば、main.pyを読み込むようになっています。
ついでにドキュメンテーション文字列のサンプルもコマンドで入力できるようにdocstrの場合はdocstr.pyを読み込みます。

main.pyとdocstr.pyの中身は以下の通りです。

# main.py
#-*- coding:utf-8 -*-

def main():

if __name__ == "__main__":
    main()
# docstr.py
""" This is a documentation string sample

Please Write Desciption

How To Use:
    import sample
    help(sample)
"""

.vimrcにコマンドを登録する

自作コマンドが完成したので、Vimから呼び出せるように.vimrcを編集します。
:sourceの後に作成したVimコマンドファイルのパスを指定します。

:source ~/.vim/mycmd/py_template/py_template.vim

実際にやってみる

登録も出来たので、実際にVimコマンドラインモードで自作コマンドを実行します。

:PyTemplate main

ドキュメンテーション文字列のサンプルを入力する場合は

:PyTemplate docstr
もしくは
:PyTemplate ds

両方実行してみた結果がコチラ

実行結果:
#-*- coding:utf-8 -*-

""" This is a documentation string sample

Please Write Desciption

How To Use:
    import sample
    help(sample)
"""

def main():

if __name__ == "__main__":
    main()

どちらも入力することが出来ました!!

今日の成果

  • Vimの自作コマンドを作成できた!!
  • Pythonプログラムの毎回書く部分を自動化できた!!

今回はVimの自作コマンドを作って、毎回の作業を効率よくしてみました。
これから少しだけPythonでのプログラム作成が快適になりそうです。

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter