第 3 章    建立新專案

▸ 安裝虛擬環境

$ cd .../webapps/virtualenv
$ virtualenv blogVenv
Ubuntu

▸ 啟用虛擬環境

$ source blogVenv/bin/activate
(blogVenv)$ pip install django psycopg2
(blogVenv)$ pip freeze

▸ 檢查 Python 執行檔之路徑

(blogVenv)$ which python

▸ 停用虛擬環境

(blogVenv)$ deactivate
Windows

▸ 啟用虛擬環境

C:\...> blogVenv\Scripts\activate.bat
(blogVenv)> pip install django psycopg2
(blogVenv)> pip freeze

▸ 檢查 Python 執行檔之路徑

(blogVenv)> where python

▸ 停用虛擬環境

(blogVenv) C:\...>blogVenv\Scripts\deactivate.bat
Mac

▸ 啟用虛擬環境

$ source blogVenv/bin/activate
(blogVenv)$ pip install django psycopg2
(blogVenv)$ pip freeze

▸ 檢查 Python 執行檔之路徑

(blogVenv)$ which python

▸ 停用虛擬環境

(blogVenv)$ deactivate

▸ 利用 CLI 建立 Django 專案:

(blogVenv) $ cd .../webapps/workspace
(blogVenv) $ django-admin startproject blog

▸ 修改專案設定檔

blog/settings.py
...
ALLOWED_HOSTS = ['*']

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'blogdb',
        'USER': 'dbuser',
        'PASSWORD': 'dbuser',
        'HOST': 'localhost',
        'PORT': '',
    }
}

...

LANGUAGE_CODE = 'zh-hant'

TIME_ZONE = 'Asia/Taipei'

...
Ubuntu

▸ 建立資料庫

$ sudo -i -u postgres
[sudo] password for <username>:
postgres@<username>$ createdb blogdb
postgres@<username>$ createuser -P dbuser
Enter password for new role: dbuser
Enter it again: dbuser
postgres@<username>$ psql
postgres=# grant all privileges on database blogdb to dbuser;
GRANT
postgres=# \q
postgres@<username>$ exit
$
Windows

▸ 建立資料庫

> cd C:\Program Files\PostgreSQL\11\bin
> set PGUSER=postgres
> set PGPASSWORD=postgres
> createdb blogdb
> create -P dbuser
Enter password for new role: dbuser
Enter it again: dbuser
> psql
psql (11.1)
Type "help" for help
postgres=# grant all privileges on database blogdb to dbuser;
GRANT
postgres=# \q
>
Mac

▸ 建立資料庫

$ createdb blogdb
$ createuser -P dbuser
Enter password for new role: dbuser
Enter it again: dbuser
$ psql postgres
<username>=# grant all privileges on database blogdb to dbuser;
GRANT
<username>=# \q
$
Ubuntu 常用之 Postgres 指令

▸ 顯示 Postgres 版本

$ psql --version

▸ 啟動 Postgres

$ sudo /etc/init.d/postgresql start

▸ 停止 Postgres

$ sudo /etc/init.d/postgresql stop

▸ Postgres 可能 需要下列檔案的存取權限,設定其檔案權限為 700

$ sudo chmod 700 /var/lib/postgresql/9.3/main

▸ Postgres 的 log 檔 (?.? 為版本):

/var/log/postgresql/postgresql-?.?-main.log

▸ 檢查 Postgres 是否正在執行

$ /etc/init.d/postgresql status

▸ 建立新的資料庫<database>

postgres@<username>$ createdb <database>

▸ 刪除資料庫<database>

postgres@<username>$ dropdb <database>

▸ 建立新的使用者 <user>

$ sudo -i -u postgres
[sudo] password for <username>:
postgres@<username>$ createuser -P <user>
Enter password for new role:
Enter it again:

▸ 刪除使用者 <user>

postgres@<username>$ dropuser <user>

▸ 進入 psql 環境

postgres@<username>$ psql

▸ psql 常用指令

✶ 設定使用者的資料庫操作權限
postgres=# grant all privileges on database "<database>" to "<user>";
✶ 更改使用者<user>的密碼
postgres=# \password <user>
✶ 列出所有資料庫
postgres=# \l
✶ 列出 <database> 裡的所有資料表
postgres=# \c <database>
<database>=# \dt
✶ 列出 <database> 裡的資料表 <table> 裡的所有資料
postgres=# \c <database>
<database>=# \l <table>
✶ 列出 <database> 裡的所有資料表裡的所有資料
postgres=# \c <database>
<database>=# \l
✶ 離開 psql
postgres=# \q

▸ 離開 postgres 環境

postgres@<username>$ exit

▸ 覺得 sudo -i -u postgres 指令輸入很麻煩?

~/.bashrc 檔案加入以下這行,以後簡單地打 pg 就可以囉!
alias pg='sudo -i -u postgres'

▸ 利用 CLI 執行資料庫遷移

(blogVenv)$ python manage.py makemigrations
(blogVenv)$ python manage.py migrate

▸ 利用 CLI 啟動伺服器

(blogVenv)$ python manage.py runserver

▸ 利用 CLI 啟動伺服器並指定埠號為 5000

(blogVenv)$ python manage.py runserver 5000

▸ Eclipse 的專案設定檔

.project
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
  <name>blog</name>
  <comment></comment>
  <projects>
  </projects>
  <buildSpec>
    <buildCommand>
      <name>org.python.pydev.PyDevBuilder</name>
      <arguments>
      </arguments>
    </buildCommand>
  </buildSpec>
  <natures>
    <nature>org.python.pydev.pythonNature</nature>
    <nature>org.python.pydev.django.djangoNature</nature>
  </natures>
</projectDescription>
.pydevproject
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?><pydev_project>
    <pydev_variables_property name="org.python.pydev.PROJECT_VARIABLE_SUBSTITUTION">
        <key>DJANGO_MANAGE_LOCATION</key>
        <value>manage.py</value>
    </pydev_variables_property>
    <pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
        <path>/${PROJECT_DIR_NAME}</path>
    </pydev_pathproperty>
    <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
    <pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">blogPython</pydev_property>
</pydev_project>

▸ 本章完成專案:blog3.zip