Django 手册 学习 心得 笔记

来源:互联网 发布:薛之谦女装淘宝店网址 编辑:程序博客网 时间:2024/06/06 08:34
Django学习笔记4、模板初学中,照书例django book 出现以下异常    raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.查Google得:from django.template import Template,Context### 加上以下两句from django.conf import  settings  settings.configure()   t = Template("My name is {{ name }}.")c = Context({"name":"Stipho"})t.render(c)#####################################第六章,admin 管理学习按照示例做出现以下情况:ImportError at /admin/Exception Value:  No module named urlsurl 中的正则是:urlpatterns = patterns('',(r'^admin/', include('django.contrib.admin.urls')),)这是老版本的设置。新版本(1.2.1)中应该这样设置:在settings.py中设置:INSTALLED_APPS = (    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.admin', ###注意,1.2.1一定要添加    'mydjango.books',)在urls.py中设置:添加 from django.contrib import admin取消注释:admin.autodiscover()在url pattern中设置:urlpatterns = patterns('',    (r'^admin/(.*)',admin.site.root),)###如需要打开admindoc,则需要以下额外设置:INSTALLED_APPS中添加:'django.contrib.admindocs',urls.py中注释:urlpatterns = patterns('',(r'^admin/doc/', include('django.contrib.admindocs.urls')),)另外,还需要python的docutils类库,但windows下尚未找到。下载地址:http://docutils.sourceforge.net/汉化后台:在setting.py里将LANGUAGE_CODE从en-us改为zh-CN   Q:可以登录后却发现没有要管理的内容(即手册中所说的“主管理索引”)A: 在需要管理的app(这里是books)下建立admin.py,将需要管理的模块添加from mysite.books.models import *from django.contrib import admin admin.site.register(Publisher)admin.site.register(Author)admin.site.register(Book)并重启serverQ:一不小心删除了管理员用户怎么办?A:在你第一次运行 syncdb 时,你很可能被问起是否创建一个 superuser ,如果那时你没有创建 superuser ,你需要运行 djang/contrib/auth/bin/create_superuser.py 来创建一个admin用户,否则你就不能登录到管理界面里去!方法,如下:(1)在新版本中(1.2.1)windows下:E:\workspace\mydjango>python manage.py createsuperuser 然后依次输入用户名、邮箱、密码等(2)在老版本中使用python /path/to/django/contrib/auth/create_superuser.py参考:http://docs.djangoproject.com/en/1.2/topics/auth/#creating-superusers##################################第七章、表单处理Q:运行例子时Could not import mydjango.books.views. Error was: cannot import name newformsA:原因是1.2.1版本的只有forms这个模块,把from django import newforms as forms 改成 from django import forms 即可!Q:表单提交的时候出现:Forbidden (403)CSRF verification failed. Request aborted.A:原因是django会对提交的数据进行跨站攻击保护,所以需要表单令牌验证参考这里:http://docs.djangoproject.com/en/dev/ref/contrib/csrf/解决办法:在settings.py 找到MIDDLEWARE_CLASSES = (    'django.middleware.common.CommonMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    'django.middleware.csrf.CsrfViewMiddleware',    'django.middleware.csrf.CsrfResponseMiddleware', ###添加这句,用于表单令牌验证    'django.contrib.auth.middleware.AuthenticationMiddleware',    'django.contrib.messages.middleware.MessageMiddleware',)另外在模板中添加验证的令牌字段 :<form action="" method="POST">    {% csrf_token %}---------------------------------------Q:提交表单,并对表单验证时出现以下异常:'ContactForm' object has no attribute 'clean_data'原因:新版的forms模块已经把clean_data更改成 cleaned_data解决:把clean_data=>cleaned_dataQ:使用from django.forms import form_for_model会出现:Error was: cannot import name form_for_model原因:新版本(1.2.1)中对form的model定义使用了新的名称解决办法:参考http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/from django.forms import ModelForm###重新定义class PublisherForm(ModelForm):###定义元数据    class Meta:        model = Publisher################################################################################################################第八章 视图重点:带有命名组的url(r'articles/(?P<year>\d{4})/$','year_archive'), ##把year当成形参(r'articles/(?P<year>\d{4})/(?P<month>\d{2})/$','month_archive'), # year和month都是形参函数的定义:mydjango.views中# year archivedef year_archive(request,year):    html = 'current year is :',year    return HttpResponse(html)# month archivedef month_archive(request,month,year):    html = 'current year and month is :',year,'-',month    return HttpResponse(html)需要注意的是如果在URLconf中使用命名组,那么命名组和非命名组是不能同时存在于同一个URLconf的模式中的。如果你这样做,Django不会抛出任何错误,但你可能会发现你的URL并没有像你预想的那样匹配正确                     如果有任何命名的组,Django会忽略非命名组而直接使用命名组。§                     否则,Django会把所有非命名组以位置参数的形式传递。§                     在以上的两种情况,Django同时会以关键字参数的方式传递一些额外参数

0 0
原创粉丝点击