创建工程
django-admin.py startproject proj_name
修改配置文件
包括时区和语言
然后修改urls.py
(r'^$', index),
这个对应的url是 http://localhost 其实就是后面什么也没有的情况
还比如 ||别忘了逗号
(r'^hello/$', hello),
这样的对应是http://localhost/hello的url的
但是我们使用index或者是hello的函数 比如先导入才行
在urls.py中
from proj_name.views import index
然后我们的views.py中一开始比较简单的就是
from django.http import HttpResponse def index(request): return HttpResponse("Hello world")
但是这样呢,是不好去使用模板和自己的变量的 于是出现了下面的
from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
from django.template import Template, Context from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() t = Template("<html><body>It is now {{ current_date }}.</body></html>") html = t.render(Context({'current_date': now})) return HttpResponse(html)
但是这样还是把html硬编码到了py文件中,
于是就在配置文件中 加上
TEMPLATE_DIRS = ( '/home/django/mysite/templates', )
from django.shortcuts import render_to_response import datetime def current_datetime(request): now = datetime.datetime.now() return render_to_response('current_datetime.html', {'current_date': now})
哇~~大变样了~~这样不错吧~
但是我们的模板是什么样的呢,这就是通过html标签来的。
http://djangobook.py3k.cn/2.0/chapter04/这有说明。
----------------------------------------
今天学习到了django admin了,但是在使用数据库的时候遇到了几个麻烦
1. django的默认编码和mysql的不一样 这样在后台写入的数据的时候就会出现错误
http://liluo.org/blog/2010/05/django-warning-incorrect-string-value/
这个应该能解决 但是还没有尝试成功 结果还导致mysql一直提示什么错误
只能卸载后重新安装~~反正没有什么数据
2.怎么卸载重新安装呢?
sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-server sudo apt-get autoremove mysql-server sudo apt-get remove mysql-common (非常重要)
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
sudo apt-get install mysql-server
就是这样~~
----------------------------
现在已经开始使用django adminle ,但是一后台一保存数据就会提示错误,看着像是编码问题。后来搜了搜,
在创建数据库的时候就应该制定编码
CREATE DATABASE [database_name] DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-------------------------------
模型中就应该指定字段的数据类型,比如
from django.db import models class Reporter(models.Model): full_name = models.CharField(max_length=70) def __unicode__(self): return self.full_name class Article(models.Model): pub_date = models.DateField() headline = models.CharField(max_length=200) content = models.TextField() reporter = models.ForeignKey(Reporter) def __unicode__(self): return self.headline
-----------------------------
处理csv文件
有专门的库 但是这个和纯文本的差不多的
#coding:utf-8 fileHandle=open("c:\users\root\desktop\2.csv",'r')#打开文件 fileList=fileHandle.readlines()#每行都读出,放到列表中 for line in fileList:#对列表的每一行进行判断 A, B, C = line.split(",") print A, B, C
最终的实现是
def read_csv (request): fileHandle=open("c:\users\root\desktop\1.txt",'r')#打开文件 fileList=fileHandle.readlines()#每行都读出,放到列表中 for line in fileList:#对列表的每一行进行判断 student_name, student_college, student_major, student_class, student_phone_num, student_dorm, student_id, mark = line.decode("GBK").split(",") #print student_name, student_college, student_major, student_class, student_phone_num, student_dorm, student_id Student_info.objects.create(student_name = student_name, student_college = student_college, student_major = student_major, student_class =(int)(student_class), student_phone_num = student_phone_num, student_dorm = student_dorm, student_id = (str)(student_id), student_status = False)
经验:数据库的字段能用字符的就用字符 少用IntegerField之类的~~
---------------
数据库一开始最好使用sqlite3,不用设置,占用少,正式使用可以使用mysql等
----------------
django中url匹配到的参数传递到函数中的两个方法
urlpatterns = patterns('', (r'^articles/(d{4})/$', views.year_archive), (r'^articles/(d{4})/(d{2})/$', views.month_archive), ) 产生函数调用:month_archive(request, '2006', '03') urlpatterns = patterns('', (r'^articles/(?P<year>d{4})/$', views.year_archive), (r'^articles/(?P<year>d{4})/(?P<month>d{2})/$', views.month_archive), ) 产生函数调用:month_archive(request, year='2006', month='03')
-------------
get和post也是区分大小写的
def method_test(request): if request.method == 'GET': return HttpResponse('get') elif request.method == 'POST': return HttpResponse('post') else: return HttpResponse('unknown')
注意那两个大写的post和get
----------------
数据库设计也是一门学问啊 foreignkey和manytomanyfield有空研究看看吧~~
----------------------------------
其实一般显示表单的和处理表单post数据的url可以使用一个 这样比较清晰吧
def f(request):
#这个是get请求这个url 也就是显示表单
if request.method == 'GET':
return form
else:
处理post来的数据
---------------------------
更新表单的数据
之前想的是比较麻烦的了。其实在显示这个更新表单之前的时候,查询一下数据库,让form的value = {{ value }}就行了