您的位置:首页 > 编程语言 > Python开发

总结python+Django+mysql项目遇到的一些问题

2013-06-03 13:57 756 查看
最近由于课程作业项目的要求,必须使用Python+Django+mysql写一个酒店预定的系统,由于本人之前没有任何web开发的基础,还以为本人大学期间都不用跟web打交道了,最后还是逃不掉,so没有任何html,js,css等基础,所以只能最后做出一个界面比较戳的东东交了。用了一周多点的时间,所有东西都是现学现卖,不过功能还是实现了,最后还是有一点点成就感滴。现在总结一下,自己遇到的问题,以便以后可以翻看翻看,或者可以给遇到相同问题的朋友一些帮助。

1.如果需要结合mysql的话,最好下载Python2.7好了,目前python-mysql连接驱动最高支持到2.7而已,我一开始时候下了python3.3后,发现不行,后来还得删掉重新装2.7.具体安装过程上篇博客有写到。如果不怕占用空间大的话,建议安装MySql Workbench,操作起来方便,如果需要导出数据库类图什么的也很方便。

2.Django里面的view.py起的功能实质上是相当于MVC模式里面的controller的作用,而非MVC的view的功能。我的理解是,它工作的原理是,首先根据URL在整个项目下的urls.py寻找到项目中的App对应的urls.py,然后在urlpattern中对应的url配对view中的方法,然后该方法中实现了逻辑处理还有调用相应的html来显示。

3.关于使用form,如果你需要在return render_to_response()中的html页面中显示form的话,必须要首先在html代码中<form></form>结构体中加入{%csrf_token%},还有在render_to_response()中加入context_instance = RequestContext(request)作为其中一个参数,否则总会报错的。

4.关于日期的一些操作,一开始的时候需要用到遍历特定区间内的日期时候,不知道怎么搞,不过最后终于被我找到了。

date = checkindate

while date < checkoutdate:

date += datetime.timedelta(days=1)

.........

然后checkin_date__lte = date, 表示的意思是:checkin_date<=date

checkout_date__gt = date,表示的意思是:checkoudate>date

datetime.datetime.now().strftime("%Y-%m-%d") #strftime()函数是控制日期的格式输出的,如果只需要月和日就是,.strftime(%m-%d)即可。

5.如果url中绑定的方法是类中的一个方法的话,那么写成,eg:url(r'^$', views.SearchHotelPage().searchHotel)

searchHotel是SearchHotelPage类中的一个方法。

6.当绑定的那个html中有多个Submit的时候,可以用如下方法来对应去相应的操作:

<input type="submit" name="Add" value="Add" class="button"></input>

<input type="submit" name="Del" value="Del" class="button"></input>

然后在view.py中:

if request.POST.has_key("Add"): ...... #对应上面的name的值

if request.POST.has_key("Del"): .....

7.使用python语言对MySQL的操作:

Reservation.objects.get() 返回至多一个结果

Reservation.objects.filter() 返回一个列表

8.关于view.py中的方法怎么和它要显示的html页面进行交互,比如:

return render_to_response("BookRoom/bookroom.html",

{'hotel_name':hotelname, 'hotel_info':hotelinfo},

context_instance = RequestContext(request,hotel_id))

用字典对应起来的关系:'hotel_name'是html中的{{hotel_name}}对应,hotelname是该方法的变量,到时候显示时候就会把hotelname映射到html中的{{hotel_name}}

9.在forms.py中定义了一个这样的表单

class SearchHotelForm(forms.Form):

cityname = forms.CharField(label='city/Town',max_length=30)

checkindate = forms.DateField(label='checkin')

checkoutdate = forms.DateField(label='checkout')

view.py中获取用户输入的数据:

form = SearchHotelForm(request.POST)

if form.is_valid():

tarname = form.cleaned_data['cityname']

checkindate = form.cleaned_data['checkindate']

checkoutdate = form.cleaned_data['checkoutdate']

这样tarname, checkindate , checkoutdate便获取了用户输入的.

html中显示是:

<form action="." method="POST">

{%csrf_token%}

<table>

{{form.as_table}}

</table>

</form>

表单预先显示给用户可以这样:

form = SearchHotelForm({'cityname':city_name,'checkindate':checkindate,'checkoutdate':checkoutdate})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: