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







2017年3月22日 星期三

Installation of Laravel Valet

after you install homebrew

composer global require "laravel/installer=~1.1"

brew update

brew install homebrew/php/php71

composer global require laravel/valet

cd ~

ls -la

looking for .bashrc

open ~/.bashrc

source ~/.bashrc

make sure you add the new path successfu
echo $PATH

valet install

ping *.dev




Installation of Composer

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

2017年3月17日 星期五

little rails project

type>brand>size>products details

entroll date
entroll time
customer ID
customer gender
customer birthday
customer email
customer address
customer TAX
payment method
delivery


customer ID
modifydate
modifytime
order No
product bran No
product brand Name
product No
product name
product type
product quantity
remark

2017年3月2日 星期四

安裝RVM

參考資料:
http://rvm.io/

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3


\curl -sSL https://get.rvm.io | bash -s stable

2017年3月1日 星期三

Rails Command Line

參考資料:
http://guides.rubyonrails.org/command_line.html

Rails 筆記

 參考資料:Ruby on Rails實戰聖經

//外卡路由 config/routes.rb
match ':controller(/:action(/:id(.:format)))', :via => :all

//資料驗證ActiveRecord Validation app/models/event.rb
class Event < ActiveRecord::Base
    validates_presence_of :name #field name
end

//分頁模組 add the following in Gemfile
gem "kaminari"
controller:
@events = Event.page(params[:page]).per(5)
view:
<%= paginate @events %>

//show message
add it at app/views/layouts/application.html.erb before yield
<p style="color: green"><%= flash[:notice] %></p>
controller:
flash[:notice] = "completed"

//The diffirences between render & redirect_to
render:回傳action樣板,而不是重新導入action
redirect_to:重新導入action

//before_action
before_action :set_event, :only => [ :show, :edit, :update, :destroy]
def set_event
  @event = Event.find(params[:id])
end
action建議封裝,放在private or protected中

//Partial template
view檔案以"_"開頭,for example _form.html.erb
<%= render :partial => 'form', :locals => { :f => f } %>

//RESTful參數
event_path(@event)需要參數,根據HTTP動詞決定show、update、destroy
events_path毋需參數,根據HTTP動詞決定index、create

2017年2月23日 星期四

rails Q&A

Q:
rails s doesn't work.(an error while trying to load the gem 'uglifier')
Ans: 
sudo apt-get install nodejs

安裝Sublime Text 2

sudo add-apt-repository ppa:webupd8team/sublime-text-2
sudo apt-get update
sudo apt-get install sublime-text

//開啟sublime text 2
subl 

2017年2月8日 星期三

JAVA筆記

final:
不可改變值的變數
類別經過final宣告不能被繼承
函數經過final宣告不能被改寫

void:

函數(function)為void時,代表不需要回傳值。

this: 

即為函數本身的field,如某函數的引數與資料成員名稱型別相同,取this為資料成員
this(); 代表呼叫沒有引數的建構元
this("cool"); 代表呼叫有引數的建構元,其原理與多載相同

super:
繼承狀態下才能使用,只能呼叫於子類別
呼叫父類別建構元,可加入引數,同多載

存取類別的資料成員

多載(overloading):
引數與型態不可相同,函數名稱、回傳值型態可相同。

改寫(overriding):
可於子類別改寫父類別的函數

private member:

只有本身class可存取

public member:

任何class可存取

protected member:
不可被外部類別呼叫,但可被繼承的子類別呼叫

省略public修飾子(modifier):
省略public不可跨package存取

封裝(encapsulate):

如外部類別需存取private member,必須透過同class的public menber存取,才能被外部取用。

建構元(constructor):

若class沒有設定建構元,系統會產生預設的建構元,此建構元沒有引數,也不會執行任何動作
建構元名稱 = calss名稱

實例變數(instance variable):
物件儲存於不同記憶體

實例函數(instance method):

透過物件來呼叫的函數

類別變數(class variable):

宣告變數加上static,用來節省記憶體空間。

類別函數(class method):

加上static的函數,可直接由類別呼叫(類別名稱.函數),無須產生物件來呼叫。

類別函數不需要用物件來呼叫方法故不使用this關鍵字

繼承(iheritance):

子類別可繼承父類別資料成員以及物件,private menber須藉由public member呼叫使用,同封裝

抽象類別(abstract class):
可建立函數提供給子類別參考,也可以宣告抽象函數給子類別改寫

抽象函數(abstract method):
僅可以宣告puclic以及protected,一定要加上abstract關鍵字

介面(interface):
函數必定要定義abstract,即全為抽象函數
函數只能宣告public或不宣告
資料成員必定要設定初始值

多重繼承:
子類別可同時實作多個介面,故利用此方法來達到多重繼承的目的









2016年11月29日 星期二

CSS語法

//外部呼叫
<link rel=stylesheet type="text/css" href="my_css.css">

//宣告方法
元件標籤{樣式性質:設定值}
element{property:value}

<style type="text/css">
body{font-size:9pt}
</style>

//網頁div置中
<div style="margin: 0px auto;"></div>

2016年11月9日 星期三

Rails Bootstrap安裝

**GemFile內新增
gem 'bootstrap-sass'

**安裝
bundle install

**import bootstrap
**app/assets/stylesheets/application.css
@import "bootstrap-sprockets"; // 放 bootstrap 前
@import "bootstrap";

**修改副檔名成scss
app/assets/stylesheets/application.css
change to 
app/assets/stylesheets/application.scss

**加入javascript
**app/assets/javascripts/application.js

//= require jquery
//= require bootstrap-sprockets