zoukankan      html  css  js  c++  java
  • 记录软件工程课程项目开发时遇到的各种小问题(django)


    1.python manage.py makemigrations 无效/无法检测出model的变化

    在修改了models.py之后,我们想要更新数据库的表,使用了python manage.py makemigrations 命令之后,显示出"No changes detected",我们因此无法migrate这个数据库。

    解决办法:
    在makemigrations 后面增加APP的名字
    比如说:

    python manage.py makemigrations coder_market
    

    这时就能检测出哪些表有变化了


    2.无法使数据库在admin后台可视化

    网上的方法大多是修改admin.py来修改,但是我使用这样的办法无效。发现将register的代码放到models.py时可以使用

    from __future__ import unicode_literals
    from django.contrib.auth.models import User
    from django.db import models
    from django.contrib import admin
    '''
    class user_login(models.Model):
        username = models.CharField(max_length=30)
        password = models.CharField(max_length=30)
        identity = models.CharField(max_length=15)
    '''
    
    '''
    class identity(models.Model):
        username = models.ForeignKey(User)
        iden = models.CharField(max_length=10)
    '''
    
    class publisher(models.Model):
        username = models.CharField(max_length=30)
        order_project = models.IntegerField()
        presonal_information = models.CharField(max_length=100)
        accept_information = models.TextField()
    
    
    class receiver(models.Model):
        username = models.CharField(max_length=30)
        get_project = models.IntegerField()
        presonal_information = models.CharField(max_length=100)
        tag = models.CharField(max_length=50)
        accept_information = models.TextField()
    
    
    class manager(models.Model):
        username = models.CharField(max_length=30)
        manage_project = models.IntegerField()
        presonal_information = models.CharField(max_length=100)
        tag = models.CharField(max_length=50)
        accept_information = models.TextField()
    
    
    class project(models.Model):
        number = models.IntegerField()
        project_publisher = models.CharField(max_length=30)
        project_content = models.TextField()
        project_receiver = models.CharField(max_length=30)
        project_manager = models.CharField(max_length=30)
        tag = models.CharField(max_length=50)
    
    
    
    class UserProfile(models.Model):
        #user = models.ForeignKey(User, unique=True, verbose_name='profile')
        user = models.OneToOneField(User, unique=True)
        identity = models.CharField(max_length=15)
    
    admin.site.register(publisher)
    admin.site.register(receiver)
    admin.site.register(project)
    admin.site.register(UserProfile)
    

    3.django无法使用login

    遇到了一个登录失败的问题。
    一个初始版本的login如下:

    def login(request):
        if request.method == "POST":
            print request.POST['login_username'],request.POST['login_password']
            user = django.contrib.auth.authenticate(username=request.POST['login_username'],
                                                    password=request.POST['login_password'])
            if user is not None:
                django.contrib.auth.login(request, user)
                return HttpResponseRedirect('/hello')
            else:
                return HttpResponse('fail to login')
        return render(request, 'login.html', {})
    

    我发现在判断user是不是存在的时候就一直判断不存在,反复检查登录的代码,虽然初级,但是应该是正确的。最后发现问题存在于注册
    注册时,我们的代码如下

    def register(request):
        if request.method == 'POST':
            reg = User()
            reg.username = request.POST['register_username']
            reg.password = request.POST['register_password'] #问题出在这一行
            reg.save()
            pro = UserProfile(user_id=reg.id)
            pro.identity = request.POST['register_identity']
            pro.save()
            return HttpResponse("run!")
        return render(request, 'register.html', {})
    

    事实上问题出在密码的设置上,我们应该使用django内置的set_password方法,即可解决问题。

    reg.set_password(request.POST['register_username'])
    

    4.在django的admin后台看到的各个表的值都是乱码

    出现问题的原因是在model.py内的类没有加__unicode__()方法,导致admin不知道拿哪一个字段来显示。改进的方法类似下面的代码

    from __future__ import unicode_literals
    
    from django.contrib import admin
    from django.contrib.auth.models import User
    from django.db import models
    
    # Create your models here.
    
    class publisher(models.Model):
        username = models.CharField(max_length=30)
        order_project = models.IntegerField()
        presonal_information = models.CharField(max_length=100)
        accept_information = models.TextField()
    
        #下面这个方法加上
        def __unicode__(self):
            return self.username 
    

    5.无法提交HTML表单

    解决方法:在HTML表单内加上{% csrf_token %}

    <form method="post">{% csrf_token %}
        <table>
        后面省略
    

    6.(1054, "Unknown column 'coder_market_project.status' in 'field list'")

    问题可能是对数据库做了修改之后只进行了python manage.py makemigrations
    没有做python manage.py migrate
    我想问题可能是在django 的数据库抽象层做了改动之后,但是连接的数据库并没有改变表或者是字段,在增删改查的时候django在对应的数据库里找不到相应的数据


    7.django数据库查询时不确定是否存在

    可以用类似下面的方法。核心是DoesNotExist异常

    try:
        p = User.objects.get(username='haha')
    except User.DoesNotExist:
        return HttpResponseRedirect('/hello')
        
    
  • 相关阅读:
    [转]基于S2SH框架的项目—antlr-2.7.2.jar包冲突问题
    输入法那没有小键盘的图标解决方法
    Chrome百度不显示中文字体
    转:数据库范式(1NF 2NF 3NF BCNF)
    转:海明纠错码
    奇阶魔方阵
    字符串的模式匹配
    红黑树
    排序算法总结
    关于面试总结9-接口测试面试题
  • 原文地址:https://www.cnblogs.com/chuxiuhong/p/6043008.html
Copyright © 2011-2022 走看看