Django学习笔记

来源:互联网 发布:centos 清理磁盘空间 编辑:程序博客网 时间:2024/05/26 12:58

>>1.django中启动服务的时候可以指定IP和Port

>>2.django中网站英文改中文

修改settings.py文件,改成下面这样:
LANGUAGE_CODE = 'zh-cn'

 

django自带的后台管理程序代码都在安装django的目录下面:
C:\Python26\Lib\site-packages\django\

 

命令行退出python的三种方法:
Ctrl+Z,然后按Enter
执行quit()
执行exit()

 

django中urls.py会用到正则表达式,正则表达式中代表开始和结束的字符分别为:^和$

 

 

>>3.每个django项目都自带一个小型的服务器,注意是每个项目都有,意思就是有多少个django项目,就有多少个server

 

>>4.这是django默认的数据库,可以正确连接上:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'D:\\workspace_myeclipse\\djangopro\\sqlite3.db',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

sqlit3数据库实际上是一个存储文件,对应的数据库名称必须是一个绝对路径+文件名.db

 

>>4.

Django 学习参考资料:
1.Django 官方网站:http://www.djangoproject.com/
2.Django book :  http://www.djangobook.com/
3.JavaEye hideto 对 www.djangobook.com 的翻译:http://hideto.javaeye.com/category/7645
 
下面是我初学Django做的一些笔记。。
--------------------------------------------------- 
在生成的数据库中有个表:django_content_type 记录了 app 中 model 中的 class,。如下图所示:

我们来看 article 这个 app 的 models.py 文件:

 

怎样改变访问首面时的页面?

       自己做的示例中,当配置了app后,访问首页时,经常就访问不到页面了,如下所示:

本以为要改变这个首页访问的页面好麻烦了,后来学习了URLConf 相关知识后知道并不是怎么难的。

 

修改 settings.py 文件,加下面这个url:

urlpatterns = patterns('',

   

     …………….

    

     (r'^', include('article.urls')),

)

再来看下 app article 下的 urls.py 文件配置:

urlpatterns = patterns('',

  

 

     (r'^$', 'article.views.index'),

    ……

)

一个空的url 会指向 article.views.index , 当我们再访问:http://localhost:8000/ 页面时,出现的界面如下所示:

 

**********************************************

URL 匹配方式(相关说明)?

1.       自动匹配

适用于参数比较少的情况下。看如下这个url配置:

       (r'^edit/(\d+)/$', 'article.views.edit'),

 

       url 中 括号是有用的,看 django 官方文档 URL dispatcher 这章说明:

       

To capture a value from the URL, just put parenthesis around it.

大致的意思是说:为了从URL中捕获值的话,使用圆括号将它包括起来。

      

对应的 views.py 下的 edit 函数如下所示:

@login_required

def edit(request, id):

 

    item = Item.objects.get(id=id)

    lists = List.objects.all()

 

    if request.method == "POST":

 

        title = request.REQUEST['title']

 

        item.title=title

        try:

            list_id = request.POST['list_id']

            list = List.objects.get(id=list_id)

        except:

            list = None

        item.article_list = list

        item.save()

 

        return HttpResponseRedirect('/item/')

 

    return render_to_response('item/edit.html' , {'item':item,'lists':lists})

 

当你使用类似以下url http://localhost:8000/item/edit/1/ 时,会自动将 1 的值赋给 edit 函数中的第二个参数 id 。例如我直接在浏览器地址栏中输入:http://localhost:8000/item/edit/1/ ,界面如下所示:

看到红色字体的文字了吗?这也是我想特别说明的一点:你可以重新排序 view’s 中 function 参数的位置。。

 

装饰器的使用?

在上面edit 函数上面有一句话: @login_required

这个是装饰器,装饰器是一个方法而不是类,login_required 是一个系统内置的装饰器,表示需要用户验证,当用户访问这个页面(edit),但还没有登录时,系统则会要求用户登录。

 

通过URL ? & 来传参数?

全汉桥他们建议不使用 ? &这种方式来传递参数,说是搜索引擎对这个支持不是很好。但有时,又必须使用这种方式来传递参数。常见的情况在查询的时候,可能传递的参数比较多,这时可能就会选择使用URL来传递参数。

需要说明的是:? 这种传递参数的形式,? 是不用(不参与)在url中匹配的。

views 的 使用 request.GET[‘param’]的方式来获取

def find(request):

    key = {}

    if request.GET.has_key('title'):

        title = request.GET['title']

        items = Item.objects.filter(title__startswith=title)

        key['title'] = title

        return render_to_response('item/list.html' , {'items':items,'key':key})

 

return HttpResponseRedirect('/item/')

 

另外,如果您不知道 用户是使用的 post 提交,还是 get 提交可以使用  request.REQUEST[‘paramName’] 方法来获取值。

 

title = request.REQUEST['title']

 

模板继承?

模板继承是Django开发中非常有用的一种解决方案。为重用带来了很大的方便。

了解{{ block.super }} 的使用

 

注释?

1.    单行注释

      {# Template inheritance Demo #}

2.     多行注释

{% comment %} Ignore everything {% endcomment %}

 

URL配置的两种写法

在view中直接写SQL语句/

from django.shortcuts import render_to_response
import MySQLdb
  
def book_list(request):
    db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost')
    cursor = db.cursor()
    cursor.execute('SELECT name FROM books ORDER BY name')
    names = [row[0] for row in cursor.fetchall()]
    db.close()
    return render_to_response('book_list.html', {'names': names})

 

验证编写的 model 是否有错

Any time you think you have problems with your models, run python manage.py validate. It tends to catch all the common model problems.

 

 

 

 

 

原创粉丝点击