django开发笔记

创建工程

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 }}就行了

posted @ 2013-11-08 21:36  virusdefender  阅读(249)  评论(0编辑  收藏  举报