# Python 與 Django 速查指令

# 一、虛擬環境(Virtual Environment)管理

# (A)虛擬環境管理作業:VirtualEnvWrapper

使用 VirtualEnvWrapper 。

虛擬環境所在目錄路徑 ~/.virtualenvs/<虛擬環境名稱>

建立虛擬環境

$ mkvirtualenv excel

查詢可用之虛擬環境

$ workon

啟用虛擬環境

$ workon excel

停用虛擬環境

$ deactivate

複製虛擬環境

$ cpvirtualenv <ExitEnvName> <TagretEnvName>

# (B)虛擬環境管理作業:Conda

使用 Conda

虛擬環境所在目錄路徑(Mac)

  • Mac: ~/_mySDK/Python_Virtual_Env/myEnv
  • Windows 10: C:\Users\AlanJui\AppData\Local\conda\conda\envs<VirtualEnvName>

建立虛擬環境

$ conda create --name myDjangoEnv django

虛擬環境存放目錄路徑:

  • C:\Users\AlanJui\AppData\Local\conda\conda\envs

  • C:\ProgramData\Anaconda3\envs

  • C:\Users\AlanJui.conda\envs

    $ conda create --name myDjangoEnv django Fetching package metadata ............. Solving package specifications: .

    Package plan for installation in environment C:\Users\AlanJui\AppData\Local\conda\conda\envs\myDjangoEnv:

    The following NEW packages will be INSTALLED:

      certifi:        2017.11.5-py35h456c6ae_0
      django:         1.11.8-py35hd476221_0
      pip:            9.0.1-py35h691316f_4
      python:         3.5.4-h1357f44_23
      pytz:           2017.3-py35hb294b1a_0
      setuptools:     36.5.0-py35h21a22e4_0
      vc:             14-h2379b0c_2
      vs2015_runtime: 14.0.25123-hd4c4e62_2
      wheel:          0.30.0-py35h38a90bc_1
      wincertstore:   0.2-py35hfebbdb8_0
    

    Proceed ([y]/n)? y

    python-3.5.4-h 100% |###############################| Time: 0:00:01 11.49 MB/s certifi-2017.1 100% |###############################| Time: 0:00:00 8.04 MB/s pytz-2017.3-py 100% |###############################| Time: 0:00:00 9.79 MB/s wincertstore-0 100% |###############################| Time: 0:00:00 1.25 MB/s django-1.11.8- 100% |###############################| Time: 0:00:01 2.55 MB/s setuptools-36. 100% |###############################| Time: 0:00:00 9.89 MB/s wheel-0.30.0-p 100% |###############################| Time: 0:00:00 3.63 MB/s pip-9.0.1-py35 100% |###############################| Time: 0:00:00 11.26 MB/s

    #

    # To activate this environment, use:

    # > activate myDjangoEnv

    #

    # To deactivate an active environment, use:

    # > deactivate

    #

    # * for power-users using bash, you must source

    #

查詢可用之虛擬環境

$ conda info --envs

啟用虛擬環境

$ source activate myDjangoEnv

【註】:即便是 Windows 平台,若 CLI 用的不是 CMD ;而是 Git Bash ,一樣要加「source」。

停用虛擬環境

$ source deactivate

刪除虛擬環境

$ conda remove --name <VirtualEnvName> --all

# 二、管理 Python 套件

# 使用 pip 管理

安裝最新版本套件 安裝最新之 django

$ pip install django

安裝某版本之套件 安裝某特定版本之 django

$ pip install django==1.11

查詢套件之版本 查詢目前使用之虛擬環境,其 django 版本為何

$ python -c "import django; print(django.get_version())"

反安裝某套件

$ pip uninstall django

建立套件安裝清單

$ pip freeze > requirements.txt

依據套件安裝清單安裝套件

$ pip install -r requirements.txt

# 使用 Conda 管理

# 安裝最新版本套件

**《範例》:**想在 myDjangoEnv 虛擬環境下,安裝 Python 3.5 版本的編譯器。

$ conda create --name myDjangoEnv python=3.5

# 安裝最新版本套件

**《範例》:**安裝最新之 django

$ conda install django

# 常用套件

  • django
  • psycopg2
  • sqlalchemy
  • pandas

# 三、Django 專案操作

# 建立 Django 專案

$ cd ~/workspace/Python   # 進到專案的工作目錄路徑
$ django-admin startproject django_01  # 建立專案及其專案根目錄
$ cd django_01  # 進入專案根目錄路徑

【註】:專案名稱,可使用「底線」,但卻不能使用「横線」。

# 啟動伺服器

$ python manage.py runserver

以上之指令,可將 ‘python manage.py` 簡化成:

$ ./manage.py runserver

# 建立 Django App

$ ./manage.py startapp first_app


# 四、資料庫操作

依據 Model 定義,製作/變更 DB Entity

# Project 層級的 Migrate 操作指令

【指令】:

$ ./manage.py migrate

《範例》:

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying sessions.0001_initial... OK

# App 層級的 Migrate 操作指令

(1)指令:

$ ./manage.py makemigrations <App_Name>

【註】:記得在 Project 的 settings.py 檔案,於 INSTALLED_APPS = [ … ] 中,先加入 <App_Name>

《範例》:

$ python manage.py makemigrations first_app
Migrations for 'first_app':
  first_app\migrations\0001_initial.py
    - Create model AccessRecord
    - Create model Topic
    - Create model Webpage
    - Add field name to accessrecord

(2)指令:

$ python manage.py migrate

《範例》:

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, first_app, sessions
Running migrations:
  Applying first_app.0001_initial... OK

# 使用 Python Shell 進行資料操作

(1) 啟用 Python Shell

$ python manage.py shell

(2)擇用 Model 中的某類別

>>> from first_app.models import Topic

(3)條列該類別的所有物件

>>> print(Topic.objects.all())
<QuerySet []>

(4)新增類別的一個物件

>>> t = Topic(topic_name="Social Network")
>>> t.save()

(5)驗證物件已建立

>>> print(Topic.objects.all())
<QuerySet [<Topic: Social Network>]>

(6)結束

>>> quit()
(myDjangoEnv)
AlanJui at MacBook-Pro.local in [~/workspace/Python/myProject_01]  on git:master ✗  0ccb775 "啟用 first_app 的首頁"
18:55:16 $

# DB使用者管理

建立「管理員」使用者

$ python manage.py createsuperuser

# 狀況排除

# 1. 無法啟動 Server

問題現象:

(myDjangoEnv)
AlanJui@WIN-01 MINGW64 /d/Workspace/Python/django_01
$ python manage.py runserver
Segmentation fault

解決方法:

$ python manage.py migrate

# 2. 無法依 App 中 models.py 的描述進行 migration

問題現象:

$ python manage.py makemigrations first_app
App 'first_app' could not be found. Is it in INSTALLED_APPS?

解決方法: 在 Project 的 settings.py 檔案,於 INSTALLED_APPS = [ … ] 中,先加入 <App_Name>

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'first_app',
  ]

# 3. 安裝路徑

Pip、Django、

C:\Tools\Miniconda3\Lib\site-packages

# Anaconda3

參考文件: https://conda.io/docs/user-guide/tasks/manage-environments.html

# 安裝與設定

Home Directory

C:\Users\AlanJui\

安裝目錄路徑

C:\ProgramData\Anaconda3\

虛擬環境目錄路徑

C:\ProgramData\Anaconda3\envs

系統環境設定

PATH = C:\ProgramData\Anaconda3\Scripts;%PATH%

驗證:

$ conda -V

# 建立 Environment

新建

$ conda create --name myenv


AlanJui@WIN-01 MINGW64 /d/Workspace/PythonExcel/PyXls-001 (master)
$ conda create --name myDjango2
Fetching package metadata .............
Solving package specifications:
Package plan for installation in environment C:\Users\AlanJui\AppData\Local\conda\conda\envs\myDjango2:

Proceed ([y]/n)? n

Exiting

以舊環境複製出新環境

$ conda create --name my_root --clone="C:\ProgramData\Anaconda3"

建立環境時,順便指定 Python 版本

$ conda create -n myenv python=3.4

建立環境時,順便安裝Python套件

$ conda create -n myenv scipy=0.15.0

以上單行指令等同以下兩條指令:

$ conda create -n myenv python
$ conda install -n myenv scipy=0.15.0

# 查詢可用環境

$ conda info --envs


$ conda env list


AlanJui@WIN-01 MINGW64 /d/Workspace/PythonExcel/PyXls-001 (master)
$ conda info --envs
# conda environments:
#
my_root                  C:\Users\AlanJui\AppData\Local\conda\conda\envs\my_root
excel                    C:\ProgramData\Anaconda3\envs\excel
root                  *  C:\ProgramData\Anaconda3

# 啟用環境

使用Git Bash

$ source activate excel

使用Anaconda Prompt

$ activate excel

# 停用環境

使用Git Bash

$ source deactivate

使用Anaconda Prompt

$ deactivate

# 安裝套件

安裝套件

$ conda install <PKG>[==V.r]

更新套件

$ conda update <PKG>

更新所有套件

$ conda update --all

升級Aconda/Conda

$ conda update conda
$ conda update anaconda

查詢已安裝之套件

$ conda list

查詢某環境已安裝之套件

$ conda list -n root

# 與 PyCharm 整合

在 PyCharm 專案中,務必指定解釋器 python 所在位置,如:/c/ProgramData/Anaconda3/envs/excel/python.exe

如若遇到 PyCharm 抱怨:Anaconda installation is not found 這是因為 PyCharm 在「判斷作業系統是否已安裝 Anaconda 的規則,是尋找[%HOMEPATH%/anaconda/]目錄是否已存在?」。

所以,遇著以上狀況時,則製作 SymboalLink 以解決問題:

C:\> mklink /D %HOMEPATH%\anaconda C:\ProgramData\Anaconda3

記得要重新啟動 PyCharm ,這樣才能令PyCharm通過「Anaconda是否已安裝的規則」。


# 佈署到 Heroku

# (1) 建立 Heroku App

$ git init
$ ...
$ heroku login
$ heroku create --buildpack heroku/python

# (2) Setting up your project

In your project add the following to your requirements.txt:

django-toolbelt

Create a file named Procfile in your project with the following content:

web: gunicorn --log-file - mysite.wsgi

In your settings.py change:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": "dev.db",
    }
}

to:

import dj_database_url
DATABASES = {
    "default": dj_database_url.config()
}

In your mysite/wsgi.py change:

application = get_wsgi_application()

to:

from dj_static import Cling, MediaCling
application = Cling(MediaCling(get_wsgi_application()))

# (3) Commit to git

Add everything to git and commit:

git add .
git commit -m "added Heroku support"

# (4) Deploy to Heroku

To deploy to Heroku you use git:

git push heroku master

Run migrations:

heroku run python manage.py migrate