为什么不要求?

时间:2014-05-12 16:55:00

标签: python django

请帮助修复代码。

model.py:

class Friends(models.Model):        
    user_id = models.IntegerField(
        blank=False,
        null=False,
    )   
    friend_id = models.IntegerField(
        blank=False,
        null=False, 
    )   

    @classmethod
    def get_entry(self, user_id, friend_id):
        return False

views.py:

@ login_required 
def user_personal(request, id):         
    if request.method == 'POST':    
        path_pk = id
        user_id = int(request.user.pk)

        if request.POST.get('action', '') == 'add':         
            try: 
                with open(os.path.join(settings.BASE_DIR, "add1.txt"), "wb") as f:
                    f.write(bytes(user_id, 'UTF-8'))                    
                Friends.get_entry(user_id=user_id, friend_id=path_pk)   #
            except: 
                with open(os.path.join(settings.BASE_DIR, "add2.txt"), "wb") as f:
                    f.write(bytes(user_id, 'UTF-8'))                                        
                Friends.set_entry(user_id=user_id, friend_id=path_pk)

    t = loader.get_template('user_personal.html')
    c = RequestContext(request, {}) 
    return HttpResponse(t.render(c))

问题在于它何时起作用

user_personal (request, 3) 

,然后有一个写调试文件add1.txt。并且没有记录调试文件add2.txt。调试文件add1.txt的内容如下:

NUL NUL 

因为此功能不起作用

Friends.get_entry (user_id = user_id, friend_id = path_pk)

1 个答案:

答案 0 :(得分:2)

在Python3中,bytes类型表示整数序列。传递一个整数转换为字节对象将创建一个bytes类型,其序列为NUL个字符,也就是\x00,并传递整数的长度。我猜您的用户对象的pk2,因此以下行:

f.write(bytes(user_id, 'UTF-8'))   

将整数序列\x00\x00写入文件。您的文本编辑器将其表示为NUL NUL