記錄軟件工程課程項目開發時遇到的各類小問題(django)


1.python manage.py makemigrations 無效/沒法檢測出model的變化

在修改了models.py以後,咱們想要更新數據庫的表,使用了python manage.py makemigrations 命令以後,顯示出"No changes detected",咱們所以沒法migrate這個數據庫。html

解決辦法:
在makemigrations 後面增長APP的名字
好比說:python

python manage.py makemigrations coder_market

這時就能檢測出哪些表有變化了數據庫


2.沒法使數據庫在admin後臺可視化

網上的方法大可能是修改admin.py來修改,可是我使用這樣的辦法無效。發現將register的代碼放到models.py時可使用django

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以下:ide

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是否是存在的時候就一直判斷不存在,反覆檢查登陸的代碼,雖然初級,可是應該是正確的。最後發現問題存在於註冊
註冊時,咱們的代碼以下post

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方法,便可解決問題。code

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

4.在django的admin後臺看到的各個表的值都是亂碼

出現問題的緣由是在model.py內的類沒有加__unicode__()方法,致使admin不知道拿哪個字段來顯示。改進的方法相似下面的代碼orm

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 %}csrf

<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在對應的數據庫裏找不到相應的數據htm


7.django數據庫查詢時不肯定是否存在

能夠用相似下面的方法。核心是DoesNotExist異常

try:
    p = User.objects.get(username='haha')
except User.DoesNotExist:
    return HttpResponseRedirect('/hello')
相關文章
相關標籤/搜索