作者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)
1F:→ birdhackor:我觉得写程式的功力跟靠不靠编辑器选关键字无关吧... 04/14 12:03
2F:→ birdhackor:自动补完只是让你打程式更快而已 04/14 12:04
3F:→ birdhackor:要让debug的次数减少最好的方式应该还是多写好的撰码 04/14 12:08
4F:→ birdhackor:方式~不要写出结构不良的code 04/14 12:09
5F:→ kusoayan:我也认同楼上说的 减少打字的时间没什麽不好阿 重点还 04/14 12:33
6F:→ kusoayan:是在於程式的架构 04/14 12:33
hello, 我看原作者应该是属於没有接触过python, 而是接触django才开始学python,
我有几位朋友也是类似这种情形, 如果一开始就要求code要漂亮架构要完美,
会让学习者产生挫折, 很快的...他就会放弃了,
他的学习方式可能是从网路上, 可能从书上, 然後可能直接把范例复制过来,
一开始就要面对几十行或几百行code, 很快他就晕了, 不想学了,
所以才建议自己去打每一行code, 让他有一种盖房子的感觉,
一行一行打, 可能打到某一行的时候, 他就会突然想到原来写前面那几行是为了什麽,
慢慢写然後慢慢想过, 他不在害怕, 不会看到code就晕倒,
然後就会整理出自己的心得, 用自己的逻辑跟架构去写程式, 这样他就会有所成长,
因我一个人教学经验有限, 针对没接触过python甚至没写过程式的人,
要来学习django所会面临的问题, 也提不出更好的教法,
就请大家多提出有没有更好的办法跟学习方法, 来帮助这些人入门, 感恩.
※ 编辑: wutony76 来自: 114.36.221.178 (04/15 00:04)
7F:→ birdhackor:其实练习好的写法不一定要很多行的程式码才能练 04/15 04:38
8F:→ birdhackor:比如说写了一个class共25行 写完之後发现有地方可以简 04/15 04:38
9F:→ birdhackor:化就开始简化,或是用几个实例跑一跑发现思考的不够周 04/15 04:39
10F:→ birdhackor:全,就花点时间改善,这样就可以练习更好的程式码了 04/15 04:39
11F:→ birdhackor:另外,以python而言的话,官网的tutorial有很多短的程 04/15 04:42
12F:→ birdhackor:式码,可以从那边看起,那些程式码多半不超过5行 04/15 04:44
13F:→ birdhackor:然後有时候他会列出几个可以得出同样结果的程式码 04/15 04:44
14F:→ birdhackor:然後用文字陈述哪种写法好,从这边练起也可以 04/15 04:44
15F:→ birdhackor:我觉得要练习好的写法有时候需要有点洁癖啦 04/15 04:46
16F:→ birdhackor:有时候写某些功能一开始一定会先求"跑得出结果" 04/15 04:46
17F:→ birdhackor:但做法会很丑,这时候就会有点受不了,不改会不舒服... 04/15 04:46
18F:→ birdhackor:其实我也不强 不过我觉得这有时候真的是态度问题 04/15 04:47
19F:→ birdhackor:像我朋友他对於改出好程式码就没啥兴趣...都只求能跑 04/15 04:48
20F:→ birdhackor:我看到他的程式码就会很不自在... 04/15 04:48
21F:→ birdhackor:然後,既然要学python那麽除了程式架构本身以外,也应 04/15 04:54
22F:→ birdhackor:该稍微注意程式码本身的排版,python有个不错的指引 04/15 04:55
25F:→ birdhackor:关於精进程式码 有篇文章我觉得挺值得看看 04/15 04:59
27F:→ birdhackor:精进你的程式码 - 从取得用户端 IP 的函式谈起 04/15 04:59
28F:→ birdhackor:整个function很短,是个不错的例子 04/15 04:59
29F:→ legnaleurc:你可以回文 ... 04/15 14:51