2017年6月14日 星期三

Django 重點整理

Installation
pip install virtualenv
virtualenv env_myproject
env_myproject\scripts\activate
source env_myproject/bin/activate
pip install django==1.11.2

Create Project
django-admin startproject myproject
In settings.py
set debug mode and database

Run Server
python manage.py runserver

Create App
python manage.py startapp myapp
In settings.py INSTALLED_APPS
add myapp

Admin Interface
python manage.py migrate
python manage.py createsuperuser
In app’s admin.py
admin.site.register(Post)
models.py
def __str__(self):
        return self.title

Create Template file
In settings.py TEMPLATES
change
'DIRS': [],
To
'DIRS': [os.path.join(BASE_DIR, 'templates').replace('\\', '/')],
creaete index.html in templates file
Create View
views in myapp
set Views

Mapping
In urls.py
url(r'^$', index),
url(r'^index/$', index),
url(r'^post/(?P<id>\d+)/$', post, name='post'),

Main template
In Main
{% block content %}{% endblock %}
In Sub
{% extends "main_template.html" %}
{% block content %}content{% endblock %}

Navigation Bar
In Main
{% include 'includes/_messages.html' %}

Filters
{{string|truncatewords:80}}
{{string|lower}}
{{string|escape|linebreaks}}
{{ post.created_at|date:"Y / m / d" }}

Model
set Model
python manage.py makemigrations
python manage.py migrate
import model to views

CRUD
from trips.models import Post
Create
Post.objects.create(name=arg)
Read
Post.objects.all()
Post.objects.get(pk=1)
Update
posts = Post.objects.filter(title__contains='Trip')
Delete
posts.delete()


Flash

Form

2017年6月8日 星期四

Python 重點整理

Number

宣告方法 a = 1
//:整數除法
**:次方
int():轉整數
float():轉浮點數
str():轉字串

String

宣告方法 a = "1"
單引號雙引號皆可
字串間可以省略 "+"來做連接
三個單、雙引號可以連接跨行的字串
\:跳脫符號
split():字串轉串列
len():取得字串長度
startswith():檢查開頭
endswith():檢查結尾
find():第一次出現位移值
rfind():最後一次出現位移值
count():字串出現次數
isalnum():是否只有字母、數字
strip():分割字串成串列
capitallize():第一個字母大寫
title():所有單字第一個字母大寫
upper():全改大寫
lower():全改小寫
swapcase():大小寫互換
center():置中,引數為空白鍵數量
ljust():置左,引數為空白鍵數量
rjust():置右,引數為空白鍵數量
replace():替換
List
宣告方法 a = []
一個串列可以有多種型態的元素
append():加入串列尾段
insert():指定加入串列
extend():結合串列(同"+=")
del():利用位移值刪除
remove():利用值刪除
pop():利用位移值刪除,或不指定位移值默認刪除最後一個串列值
index():利用值尋找位移值
in():某值是否存在,回傳布林值
count():計算某值出現次數
join():串列轉字串
sort():排序並改變變數
sorted():排序並不改變數,建立副本
len():取得串列長度
copy():複製串列

Tuple

宣告方法 a = ()
宣告之後元素不可修改
宣告Tuple每個元素後都要加逗號",",結尾可以不用加
Tuple一次可指派多的變數
tuple():轉換串列成Tuple

Dictionary

宣告方法 a = {}
a = {"key1": "value1", "key2": "value2"}
dict():轉換雙值序列成字典
update():合併字典
del():利用鍵刪除
clear():清空字典(同"={}")
in():某鍵是否存在,回傳布林值
get():取得某鍵值
keys():取得所有的鍵,可利用list()轉換為串列
values():取得所有值,可利用list()轉換為串列
items():取得所有鍵與值,鍵值以Tuple型態回傳
copy():複製字典

Set

宣告方法 a = set()
set():轉換為set
in():某鍵是否存在,回傳布林值
intersection():取得交集(同"&")
union():取得聯集(同"|")
difference():取得差集(同"-")
symmetric_difference():取得互斥(同"^")
issubset():檢查子集合(同"<=")
issuperset():檢查超集合(同">=")
<:檢查真子集
>:檢查真超集合

Iteration

zip():跌代多個序列,最短序列結束時停止
range():回傳指定範圍的一串數字
sum():計算可迭代物件總和

生成式

產生1-5整數串列
>>>a = [a for a in range(1,6)]
[1,2,3,4,5]
結合if 產生奇數
>>>a = [a for a in range(1,6) if a % 2 == 1]
[1,3,5]
雙for
cell = [(row, col) for row in rows for col in cols]
for cell in cells:
    print(cell)

Function

*引數:Tuple
**引數 :字典
lambda():匿名函式

Namespace

globals():全域
locals():區域

Standard Library

setdefault():當字典沒有找到指定鍵時,使用預設的值回應
defaultdict():宣告字典時,當字典沒有找到指定鍵時,使用預設的值回應
Counter():計數器,回傳字典
most_common():依照降冪回傳元素
OrderedDict():記住加入字典鍵的順序
deque():堆疊+序列
itertools():跌代用搭配函式chain(),cycle(),accmulate()
pprint():印出自動排列的元素

OO

property():設定gette,setter
@property:裝飾器,放在getter之前
@name.setter:裝飾器,放在setter之前
@classmethod:裝飾器,類別方法
@staticmethod:裝飾器,靜態方法
Duck Typeing:

Unicode

encode():編碼
decode():解碼
import re
match()
search()
findall()
split()

I/O

open(filename, mode):

mode二碼
第一碼:
r -讀取
w - 檔案存在與否,均可寫入
x - 檔案不存在時,寫入
a - 檔案存在時,寫入結尾

第二碼:
t - 文字
b - 二進位

write():寫入檔案
read():讀取
readline():行為單位讀取
readlines():行為單位讀取,並建立串列
seek():

DB API

connect():設定引數,連接資料庫
cursor():建立物件處理查詢指令
execute():執行SQL指令
executemany():執行多個SQL指令
fetchone():取得execute
fetchmany():取得多個execute
fetchall():取得全部execute

NoSql

安裝Redis:pip install redis
宣告
import redis
conn = redis.Redis()

String
set():設定鍵,值
get():取得值
setnx():鍵不存在時才會設定
getset():回傳舊值,設定新值
getrange():取得子字串
setrange():替換子字串
mset():一次設定多個鍵
delete():刪除鍵
incr():遞增
incrbyfloat():遞增
decr():遞減
decrbyfloat():

List(只能放字串)
lpush():插入一個或多個於開頭
linsert():插入某值之前與之後
lset():插入於指定位移值
rpush():插入於結尾
lindex():利用位移值取值
lrange():取得位移值範圍的值
ltrim():擷取位移值範圍串列

Hash(只能放字串)
hmset():設定欄位值
hset():設定單一欄位值
hget():取得欄位值
hmget():取得多個欄位值
hkeys():取得所有欄位鍵
hvals():取得所有欄位值
hlen():取得欄位數量
hgetall():取得所有欄位鍵/值
hsetnx():設定欄位值,當欄位不存在時

Set
sadd():加入一個或多個集合
scard():取得集合值數量
smembers():取得所有集合值
srem():移除集合值
sinter():取得交集
sinterstore():取得交集並存入進集合
sunion():取得聯集
sunionstore():取得聯集並存入進集合
sdiff():取得差集
sdiffstroe():取得差集並存入進集合

Sorted Set
zadd():加入
zrank():取得數列
zscore():取得值
zrange():數列範圍的串列

Cache
expire():設定逾期時間

For Test

using doctest
import doctest
doctest.testmod()


Flask
run():debug=true 除錯網頁


繼承
class Person(Alien, God, Monster):  #可實行多重繼承

封裝
利用雙底線__來封裝變數

class Person:

def __init__(self, a=2, b=3):
self.__a=a
self.__b=b

def do(self):
print(self.__a + self.__b)

類別變數Counter為例

class Person:
count = 0
def __init__(self):
Person.count += 1
print(Person.count)

tom = Person()
jack = Person()
amy = Person()


呼叫父類別的建構子
class Father():
    def __init__(self):
        print("last name Hsieh")

class Son(Father):
    def __init__(self):
        Father.__init__(self)
        print("Son created")


特別method名稱
class Book():
def __init__(self, name, pages):
self.name = name
self.pages = pages
def __str__(self):
return "Name:{}".format(self.name)
def __len__(self):
return self.pages
def __del__(self):
print("A book is deleted.")

b = Book("The Guide", 20)

print(b) # __str__
print(len(b)) # __len__
del b # __del__
更多參考https://openhome.cc/Gossip/Python/SpecialMethodNames.html

//lambda用完即丟 可搭配 map(), filter()等等
lambda num: n % 2==0