Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 877|回复: 0

Django常见出错解决方案汇总-乾颐堂

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-6-24 05:09:13 | 显示全部楼层 |阅读模式

    一、模板类型错误:

    错误原因:在models中漏掉了return:

    class UserProfile(models.Model):

         """

         功能说明:        扩展用户

         ---------------------------------------------------------------------------

         修改人            修改时间                修改原因

         ------------------------------------------------------------------------------

         BeginMan            2013-05-05

         """

         user=models.OneToOneField(User,blank=True,null=True,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'产品'))        #产品

         class Meta:

             verbose_name = _(u'配置')

             verbose_name_plural = _(u'用户配置')

         def __unicode__(self):

             【这里】_(u'%(user_name)s') % {'user_name':self.user.username} 

    这里加上return即可。

     

    二、url相关错误

    、静态文件无法访问,如样式出不来

     

    css样式总出不来,折腾了一个多小时,原来,urlpatterns 写成这样:

     

    urlpatterns = patterns('',

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

    )

     

    #登录注册

    urlpatterns = patterns('',

         (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'}),  #注册成功  

    )

     

    #admin后台管理

    urlpatterns += patterns('',

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

         (r'^admin/', include(admin.site.urls)),

    )

    #静态文件的访问

    urlpatterns += patterns('',

         (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_SITE}),

         (r'^upload_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),

    )

    我把 [登录注册] url后面也写成 = 而并非+= ,这就造成了url覆盖,所以就加载不了静态文件,同时首页也会打不开。

     

    三、编码错误

    、错误类型如下:

     

    DjangoUnicodeDecodeError at /admin/books/book/

    'ascii' codec can't decode byte 0xe8 in position 0: ordinal not in range(128). You passed in <Book: [Bad Unicode data]> (<class 'books.models.Book'>)

     

    解决方案:

     

    混淆了 python2 里边的 str 和 unicode 数据类型。

     

    (0)、你需要的是让编码用实际编码而不是 ascii

     

    (1)、对需要 str->unicode 的代码,可以在前边写上

     

    import sys

     

    reload(sys)

     

    sys.setdefaultencoding('utf8')

     

    把 str 编码由 ascii 改为 utf8 (或 gb18030)

     

    (2)、python3 区分了 unicode str 和 byte arrary,并且默认编码不再是 ascii

     

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

     

    四、其他错误

    、Django POST请求错误forbidden(403) CSRF verification failed. Request aborted

     

    在 settings.py 中的

     

    MIDDLEWARE_CLASSES 设置下 添加

    'django.middleware.csrf.CsrfResponseMiddleware',

    重新 runserver.   OK

    重点参考:http://blog.csdn.net/feng88724/article/details/7221449

     

    我用的是django1.2.3,当使用session时,也会像上面出错,这时把下面注释掉即可:

     

    #    'django.middleware.csrf.CsrfViewMiddleware',               #这段代码理应注释掉,在使用session的时候

    、login:login() takes exactly 1 argument (2 given)

     

    这在登录视图函数的时候特别常见,原因就是函数login与login模块的名字冲突,如登录url这样写:

     

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

     那么,对应的视图函数如下:

     

    def login(request):

        """

        功能说明:        登 录

        ------------------------------------------------------------

        开发者           修改时间           修改原因

        ------------------------------------------------------------

        beginman        2013-06-05

        """

        if request.method == "POST":

            try:

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

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

                user = authenticate(username=username,password=password)

                if user is not None:

                    if user.is_active:

                        login(request,user)

                        return HttpResponse('ok')

                    else:

                        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:

                        login(request,user)

                         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 来在前台实现跳转。

    http://www.qytang.com/cn/list/28/422.htm
    http://www.qytang.com/cn/list/28/421.htm
    http://www.qytang.com/cn/list/28/420.htm
    http://www.qytang.com/cn/list/28/417.htm
    http://www.qytang.com/cn/list/28/416.htm
    http://www.qytang.com/cn/list/28/407.htm
    http://www.qytang.com/cn/list/28/403.htm
    http://www.qytang.com/cn/list/28/404.htm
    http://www.qytang.com/cn/list/28/397.htm
    http://www.qytang.com/cn/list/28/396.htm
    http://www.qytang.com/cn/list/28/395.htm
    http://www.qytang.com/cn/list/28/394.htm

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 03:04 , Processed in 0.053515 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表