当前位置: 首页 >数据库 > 记录软件工程课程项目开发时遇到的各种小问题(django)

记录软件工程课程项目开发时遇到的各种小问题(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_literalsfrom django.contrib.auth.models import Userfrom django.db import modelsfrom django.contrib import admin'''class user_login(models.Model):useame = models.CharField(max_length=30)password = models.CharField(max_length=30)identity = models.CharField(max_length=15)''''''class identity(models.Model):useame = models.ForeignKey(User)iden = models.CharField(max_length=10)'''class publisher(models.Model):useame = models.CharField(max_length=30)order_project = models.IntegerField()presonal_information = models.CharField(max_length=100)accept_information = models.TextField()class receiver(models.Model):useame = 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):useame = 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_useame'],request.POST['login_password']user = django.contrib.auth.authenticate(useame=request.POST['login_useame'],password=request.POST['login_password'])if user is not None:django.contrib.auth.login(request, user)retu HttpResponseRedirect('/hello')else:retu HttpResponse('fail to login')retu render(request, 'login.html', {})

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

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

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

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

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

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

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

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(useame='haha')except User.DoesNotExist:retu HttpResponseRedirect('/hello')

作者:唯心不易
来源链接:https://www.cnblogs.com/chuxiuhong/p/6043008.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/118505.html

分享给朋友:

“记录软件工程课程项目开发时遇到的各种小问题(django)” 的相关文章

MySQL数据库(基础) 2022年05月16日 21:54:19
连接数据库版本不一致 2022年05月20日 01:07:15
触发器的定义及优点 2022年05月21日 11:37:15
mysql 查询数据库内存大小 2022年06月06日 11:11:26
mysql 查询或 2022年06月07日 13:56:22
mysql查询最后一条记录 2022年06月08日 19:25:45
mysql查询给某个字段赋值 2022年06月10日 21:43:53
Mysql查询某字段值重复的数据 2022年06月11日 19:39:22