首頁 >後端開發 >Python教學 >Django常見出錯解決方案總結

Django常見出錯解決方案總結

高洛峰
高洛峰原創
2016-10-17 14:00:411408瀏覽

一、模板型別錯誤:

錯誤原因:在models中漏掉了return:

class UserProfile(models.Model):

Django常見出錯解決方案總結

  modp=To ,related_name='user',verbose_name=_(u'用戶'))

     company_name=models.CharField(u'企業(或代理商)名稱',max_length=30, default='未知')     企業商名稱

     product=models.ForeignKey(Product, blank=True,null=True,verbose_name=_(u'產品'))        # _(u'配置')

         verbose_name_plural = _(u'使用者設定')

     def __unicode__(self):

         【這裡】_(u'%(user_name)s') % {selfuser_name':f.user.user.com即可。

二、url相關錯誤

、靜態文件無法訪問,如樣式出不來


css樣式總出不來,折騰了一個多小時,原來,urlpatterns 寫成這樣

urlpatterns = patterns('',


     (r'^ $','login.msg.index'),      #首頁

)

, 寫


     (r'^accounts/register/$','login.msg.register_page'), #註冊

     (r'^accounts/login/$','login.msg.login'), 登錄  r'^accounts/logout/$','django.contrib.auth.views.logout',{'next_page':'/'}),  #Django提供一個專用於處理登出表單函數logout

     (r' ^accounts/register/success/$','django.views.generic.simple.direct_to_template',{'template':'registration/register_success.html'}),  #註冊成功 

)

管理

urlpatterns += patterns('',

     (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    min(r' .site.urls)),

)

#靜態檔案的存取

urlpatterns += patterns('',

     (r'^site_media/(?P

     (r'^site_media/(?P

static.serve', {'document_root': settings.MEDIA_SITE}),

     (r'^upload_media/(?P

.*)$', 'django.views.static.serve', {'P

.*)$', 'django.views.static.serve', {'document_': doct. .MEDIA_ROOT}),

)

我把[登入註冊] url後面也寫成= 而並非+= ,這就造成了url覆蓋,所以就加載不了靜態文件,同時首頁也會打不開。

三、編碼錯誤

、錯誤類型如下:

DjangoUnicodeDecodeError at /admin/books/book/inal

range (128). You passed in

(

)


解決方案:

混淆了python2 裡邊的str 和unicode 資料類型。

(0)、你需要的是讓編碼用實際編碼而不是ascii


(1)、對需要str->unicode 的代碼,可以在前邊寫上

sys


reload(sys)


sys.setdefaultencoding('utf8')


(

(2)、python3區分了unicode str 和byte arrary,並且預設編碼不再是ascii


參考:http://vososo.com/vo/558


、其他錯誤

(403) CSRF verification failed. Request aborted


在settings.py 中的


MIDDLEWARE_CLASSESiddles. server.   OK


重點參考:http://blog.csdn.net/feng88724/article/details/7221449


我用的是django1.2.3,當使用session時,也會像上面出錯,這時把下面註解掉即可:


#    'django.middleware.csrf.CsrfViewMiddleware',               #這段程式碼理應註解掉,使用使用生活的時候將 130,0006 年程式碼

這在登入視圖函數的時候特別常見,原因就是函數login與login模組的名字衝突,如登入url這樣寫:


(r'^account/login/$', 'login'),                        #登入

@中那麼,對應的視圖

 if request.method = = "POST":

        try:

            username = request.POST.get('username')

ST          user = authenticate(username=username,password=password )Django常見出錯解決方案總結

            if user is not None:

                if user )

                    return HttpResponse('ok')

         return HttpResponse('error')

        except Exception ,e:

            log.error("login:%s" % str(e))

    return render_to_response('account/login.html')

 當然如果這樣寫,不要忘記導入:

from django.contrib.auth import authenticate, login

 這樣就壞事了,因為出現了兩個login.這就導致了上面的問題,解決辦法有兩個,

、修改login視圖函數的名稱和對應的url中。如webLogin

、導入設定:from ..login as _login 這樣也行,別忘了都要改過來。

、無法跳轉


如,我想登入。然後登入成功後跳到首頁,如上:把上面程式碼改寫成這樣

.....

if user.is_active:

                    return HttpResponseRedirect('/' )

....


 但是卻沒有實現跳轉,如下:


這裡並不是跳轉寫錯了,而是沒有註意到我這個登錄界面是ajax POST形式的,程式碼如下:

//登录
function _submit(){
    var username = $("input[name='username']").val();
    var password = $("input[name='password']").val();
    if (username == ""){
        art.dialog({content: '用户名不能为空',time :1.5}); 
    }else if(password == ""){
        art.dialog({content: '密码不能为空',time :1.5});  
    }else{
    $.post('/account/login/',{'username':username,'password':password},function(data){
                if (data =='error'){
                    art.dialog({content: '用户名或密码错误',time :1.5});    
                }
            }); 
    }
}

 Query.post( url, [data], [callback], [type] ) :

如果傳回,它只會傳回一個字串。所以並不能在後台跳轉。

解決方法是: return HttpResponse('ok'),透過接受返回的Ok 來在前台實現跳躍。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn