ホームページ >バックエンド開発 >Python チュートリアル >Django の一般的なエラーに対する解決策の概要

Django の一般的なエラーに対する解決策の概要

高洛峰
高洛峰オリジナル
2016-10-17 14:00:411402ブラウズ

1. テンプレート タイプ エラー:

エラーの原因: return:

class UserProfile(models.Model):

Django の一般的なエラーに対する解決策の概要

がモデルにありません user=models.OneToOneField(User,blank=True,null=True , relationship_name='user',verbose_name=_(u'user'))

company_name=models.CharField(u'会社 (またはエージェント) 名',max_length=30,default='unknown') #会社名

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

class Meta:

verbose_name_plural = _(u'User Configuration')

def __unicode__(self ):

[ここ]_(u'%(user_name)s') % {'user_name':self.user.username}

ここに return を追加 以上です。


2. URL関連のエラー

、スタイルが生成できないなど、静的ファイルにアクセスできない


1時間以上格闘した結果、判明。 urlpatterns は次のように記述されます:


urlpatterns = pattern('',

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

)


#ログイン登録

urlpatterns = pattern('',

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

(r'^accounts/login/$','login.msg. login')、#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'}), #登録が成功しました

)

#admin backend

urlpatterns += pattern('',

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

(r'^admin) を管理する/', include(admin .site.urls)),

)

#静的ファイルアクセス

urlpatterns += pattern('',

) (r'^site_media/(?P

.*)$' , 'django.views.static.serve', {'document_root': settings.MEDIA_SITE}),

(r'^upload_media/(?P

.*)$', 'django.views.static.serve', {'document_root': settings .MEDIA_ROOT}),

)

また、[ログイン登録] URL の後に += ではなく = を書いたため、URL が上書きされ、静的ファイルを読み込むことができなくなりました。ホームページが開かなくなります。


3. コーディング エラー

、エラーの種類は次のとおりです:


DjangoUnicodeDecodeError at /admin/books/book/

'ascii' コーデックは位置 0 のバイト 0xe8 をデコードできません: 序数範囲 (128) にありません。

(

)


を渡しました。 解決策:


Python2 の str データ型と unicode データ型を混同しました。


(0)、必要なのは、ascii


(1) の代わりに実際のエンコーディングを使用することです。str->unicode を必要とするコードの場合は、


import と書くことができます。フロント sys


reload(sys)


sys.setdefaultencoding('utf8')


str エンコーディングを ascii から utf8 (または gb18030) に変更します


(2)、python3 Unicode str と byte 配列を区別し、デフォルトのエンコーディングは ascii ではなくなりました


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


4. その他のエラー

、Django POST リクエスト エラー禁止 (403) CSRF 検証が失敗しました。リクエストは中止されました


settings.py に


MIDDLEWARE_CLASSES を追加して、OK

重要なポイントの参照: http://blog.csdn.net/feng88724/ Article/details/7221449

セッションを使用すると、上記と同じエラーが発生します:


# 'django.middleware .csrf.CsrfViewMiddleware', #セッション

を使用する場合、login:login() は引数を 1 つだけ受け取ります (2 つ指定されます)


これは、関数を表示するためにログインするときに特に一般的です。理由は、ログイン関数とログインモジュールの名前が競合しているためです。たとえば、ログイン URL は次のように記述されています。

(r '^account/login/$'、 'login')、= "post":r try:

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

password = request.get.get( 'パスワード')

user = 認証 (userName = US Ername、password = パスワード )

user が none でない場合:

Django の一般的なエラーに対する解決策の概要 user.is_active の場合:

Login (Request, User)

RTURN HTTPRESPONSE ('OK')

ELSE:

RTURN HTTPRESPONSE t例外 , E: o Log.error ("Login: % S" % STR (E))

Return Render_to_Response ('Account/login.html')

もちろんdjangoから。 contrib.auth import 認証、ログイン

これは、ログインが 2 つあるため、上記の問題につながるため、解決策は 2 つあり、ログイン ビュー関数の名前と対応する URL を変更します。 webLogin

など、インポート設定: from ..login as _login これもOKです、忘れずに変更してください。

、ジャンプできない

例えば、ログインしたい。上記のように、ログインに成功したらホームページに移動します。 上記のコードを次のように書き換えます

....


if user.is_active:

上記のコードを次のように書き換えます

pResponseRedirect( '/' )

....


しかし、次のようにジャンプは実装されていません:


ジャンプが間違っているわけではありませんが、ログインインターフェイスが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] ):

返される場合は、文字列のみを返します。したがって、バックグラウンドでジャンプすることはできません。

解決策は、返された Ok を受け入れてフォアグラウンドでジャンプを実装することにより、return HttpResponse('ok') です。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。