作者wutony76 (米粉湯)
看板Python
標題Re: [討論] Django菜鳥 怎麼打地基啊?
時間Sat Apr 14 04:55:35 2012
hello, 你好
你可以參考我的習慣, 1234照順序去做
以留言板來說:
startapp guestbook
1.先想models,
看一下別人網站的留言板有什麼欄位, 標題、內容...所以得出結果
#guestbook/models.py
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
author = models.ForeignKey(User)
title = models.CharField(max_length=100)
body = models.TextField()
2.處理forms
在guestbook目錄下開一個forms.py
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
exclude = ('author',)
3.處理views
#guestbook/views.py
from .forms import PostForm
from django.shortcuts import render_to_response
from django.template import RequestContext
def post_add(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.author = request.user
obj.save()
else:
form = PostForm()
return render_to_response('guestbook/post_add.html', {
'form': form
}, context_instance=RequestContext(request))
4.最後處理template
在專案目錄開一個templates/guestbook/post_add.html檔案
或是放在guestbook下面, 像這樣guestbook/templates/guestbook/post_add.html
{% block extends "base.html" %}
{% block content %}
<form action="" method="post">
<table>
{{ form.as_table }}
</table>
<input type="submit">
</form>
{% endblock %}
專案的urls.py
urlpatterns += patterns('',
url(r'^guestbook/', include('guestbook.urls', namespace='guestbook')),
)
在guestbook的目錄下也開一個urls.py
urlpatterns = patterns('guestbook',
url(r'post_add', 'views.post_add', name='post_add'),
)
這樣你就可以在template url tag
{% url namespace:urlname %}
<a href="{% url guestbook:post_add %}">我要留言</a>
如果沒有取namespace的話建議 url的name前面建議加個prefix
如:url(r'post_add', 'views.post_add', name='guestbook_post_add')
這樣才不會跟別的app名稱衝到
建議不要直接把網址打在上面<a href="/guestbook/post_add">我要留言</a>
像是一台主機裡面掛很多網站
domain/projects/mysite1
domain/projects/mysite2
...
可能有一百多個網站
這樣你在搬移專案目錄的時後才會對到正確的網址
依我個人經驗, 想要進步的話, 建議不用買書,
不要依賴編輯器去選擇關鍵字跟屬性, 我是使用gvim,
每天都要寫, 每一行程式碼都要自己打, 用手去記憶,
寫 -> debug -> 寫 -> debug ... 一直重複下去,
然後你就會發現debug次數越來越少.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.36.221.178
※ 編輯: wutony76 來自: 114.36.221.178 (04/14 05:47)
→ birdhackor:我覺得寫程式的功力跟靠不靠編輯器選關鍵字無關吧... 04/14 12:03
→ birdhackor:自動補完只是讓你打程式更快而已 04/14 12:04
→ birdhackor:要讓debug的次數減少最好的方式應該還是多寫好的撰碼 04/14 12:08
→ birdhackor:方式~不要寫出結構不良的code 04/14 12:09
→ kusoayan:我也認同樓上說的 減少打字的時間沒什麼不好阿 重點還 04/14 12:33
→ kusoayan:是在於程式的架構 04/14 12:33
hello, 我看原作者應該是屬於沒有接觸過python, 而是接觸django才開始學python,
我有幾位朋友也是類似這種情形, 如果一開始就要求code要漂亮架構要完美,
會讓學習者產生挫折, 很快的...他就會放棄了,
他的學習方式可能是從網路上, 可能從書上, 然後可能直接把範例複製過來,
一開始就要面對幾十行或幾百行code, 很快他就暈了, 不想學了,
所以才建議自己去打每一行code, 讓他有一種蓋房子的感覺,
一行一行打, 可能打到某一行的時候, 他就會突然想到原來寫前面那幾行是為了什麼,
慢慢寫然後慢慢想過, 他不在害怕, 不會看到code就暈倒,
然後就會整理出自己的心得, 用自己的邏輯跟架構去寫程式, 這樣他就會有所成長,
因我一個人教學經驗有限, 針對沒接觸過python甚至沒寫過程式的人,
要來學習django所會面臨的問題, 也提不出更好的教法,
就請大家多提出有沒有更好的辦法跟學習方法, 來幫助這些人入門, 感恩.
※ 編輯: wutony76 來自: 114.36.221.178 (04/15 00:04)
→ birdhackor:其實練習好的寫法不一定要很多行的程式碼才能練 04/15 04:38
→ birdhackor:比如說寫了一個class共25行 寫完之後發現有地方可以簡 04/15 04:38
→ birdhackor:化就開始簡化,或是用幾個實例跑一跑發現思考的不夠周 04/15 04:39
→ birdhackor:全,就花點時間改善,這樣就可以練習更好的程式碼了 04/15 04:39
→ birdhackor:另外,以python而言的話,官網的tutorial有很多短的程 04/15 04:42
→ birdhackor:式碼,可以從那邊看起,那些程式碼多半不超過5行 04/15 04:44
→ birdhackor:然後有時候他會列出幾個可以得出同樣結果的程式碼 04/15 04:44
→ birdhackor:然後用文字陳述哪種寫法好,從這邊練起也可以 04/15 04:44
→ birdhackor:我覺得要練習好的寫法有時候需要有點潔癖啦 04/15 04:46
→ birdhackor:有時候寫某些功能一開始一定會先求"跑得出結果" 04/15 04:46
→ birdhackor:但做法會很醜,這時候就會有點受不了,不改會不舒服... 04/15 04:46
→ birdhackor:其實我也不強 不過我覺得這有時候真的是態度問題 04/15 04:47
→ birdhackor:像我朋友他對於改出好程式碼就沒啥興趣...都只求能跑 04/15 04:48
→ birdhackor:我看到他的程式碼就會很不自在... 04/15 04:48
→ birdhackor:然後,既然要學python那麼除了程式架構本身以外,也應 04/15 04:54
→ birdhackor:該稍微注意程式碼本身的排版,python有個不錯的指引 04/15 04:55
→ birdhackor:關於精進程式碼 有篇文章我覺得挺值得看看 04/15 04:59
→ birdhackor:精進你的程式碼 - 從取得用戶端 IP 的函式談起 04/15 04:59
→ birdhackor:整個function很短,是個不錯的例子 04/15 04:59
→ legnaleurc:你可以回文 ... 04/15 14:51