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

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

解决办法:

在makemigrations 后面增加APP的名字

比如说:

  1. python manage.py makemigrations coder_market

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


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

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

  1. from __future__ import unicode_literals
  2. from django.contrib.auth.models import User
  3. from django.db import models
  4. from django.contrib import admin
  5. '''
  6. class user_login(models.Model):
  7. username = models.CharField(max_length=30)
  8. password = models.CharField(max_length=30)
  9. identity = models.CharField(max_length=15)
  10. '''
  11. '''
  12. class identity(models.Model):
  13. username = models.ForeignKey(User)
  14. iden = models.CharField(max_length=10)
  15. '''
  16. class publisher(models.Model):
  17. username = models.CharField(max_length=30)
  18. order_project = models.IntegerField()
  19. presonal_information = models.CharField(max_length=100)
  20. accept_information = models.TextField()
  21. class receiver(models.Model):
  22. username = models.CharField(max_length=30)
  23. get_project = models.IntegerField()
  24. presonal_information = models.CharField(max_length=100)
  25. tag = models.CharField(max_length=50)
  26. accept_information = models.TextField()
  27. class manager(models.Model):
  28. username = models.CharField(max_length=30)
  29. manage_project = models.IntegerField()
  30. presonal_information = models.CharField(max_length=100)
  31. tag = models.CharField(max_length=50)
  32. accept_information = models.TextField()
  33. class project(models.Model):
  34. number = models.IntegerField()
  35. project_publisher = models.CharField(max_length=30)
  36. project_content = models.TextField()
  37. project_receiver = models.CharField(max_length=30)
  38. project_manager = models.CharField(max_length=30)
  39. tag = models.CharField(max_length=50)
  40. class UserProfile(models.Model):
  41. #user = models.ForeignKey(User, unique=True, verbose_name='profile')
  42. user = models.OneToOneField(User, unique=True)
  43. identity = models.CharField(max_length=15)
  44. admin.site.register(publisher)
  45. admin.site.register(receiver)
  46. admin.site.register(project)
  47. admin.site.register(UserProfile)

3.django无法使用login

遇到了一个登录失败的问题。

一个初始版本的login如下:

  1. def login(request):
  2. if request.method == "POST":
  3. print request.POST['login_username'],request.POST['login_password']
  4. user = django.contrib.auth.authenticate(username=request.POST['login_username'],
  5. password=request.POST['login_password'])
  6. if user is not None:
  7. django.contrib.auth.login(request, user)
  8. return HttpResponseRedirect('/hello')
  9. else:
  10. return HttpResponse('fail to login')
  11. return render(request, 'login.html', {})

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

注册时,我们的代码如下

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

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

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

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

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

  1. from __future__ import unicode_literals
  2. from django.contrib import admin
  3. from django.contrib.auth.models import User
  4. from django.db import models
  5. # Create your models here.
  6. class publisher(models.Model):
  7. username = models.CharField(max_length=30)
  8. order_project = models.IntegerField()
  9. presonal_information = models.CharField(max_length=100)
  10. accept_information = models.TextField()
  11. #下面这个方法加上
  12. def __unicode__(self):
  13. return self.username

5.无法提交HTML表单

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

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

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

问题可能是对数据库做了修改之后只进行了python manage.py makemigrations

没有做python manage.py migrate

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


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

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

  1. try:
  2. p = User.objects.get(username='haha')
  3. except User.DoesNotExist:
  4. return HttpResponseRedirect('/hello')

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

  1. Android 项目优化(六):项目开发时优化技巧总结

    在之前我们讲了很多能够优化 Android 开发项目质量的方案,这些方案更多的是从一些比较专精的方向切入的,阐述的是一些比较重要且独立的优化方案. 本文我们将总结一下在日常开发过程中我们能够使用的一些 ...

  2. 使用Eclipse进行Javaweb项目开发时,如何设置外置浏览器Chrome

    使用Eclipse开发Javaweb项目时,在Eclipse中显示页面不是很好,那么如何让它自动打开外置浏览器呢?操作如下

  3. vue项目开发时怎么解决跨域

    vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' header is prese ...

  4. 【问题记录】web项目访问时出现404

    请一定检查一下项目的Context root是否是你访问时使用的. Context root设置为/时,可以直接用ip+端口访问. Context root设置为项目名的,访问时请带上项目名. 设置方 ...

  5. iOS开发--Swift 最近项目开发中遇到的一些小问题与解决方法

    1, Swift 修改导航栏颜色 self.navigationController?.navigationBar.barTintColor 2, Swift button 属性设置时直接进行初始化 ...

  6. 最近在用mvc3开发时遇到的一些小问题与解决方法....

    问题一:控制器中的字符串如何显示在view的javascript中?例如ViewBag.str="1,2,3,4,5"; 解决办法:例如:<script type=" ...

  7. TMS320F28335项目开发记录1_CCS的使用介绍

    CCS使用介绍 一.前言 本系列文章记录本人实际项目开发时对ti的DSP28335,以及CCS开发环境等的学习与记录,相对于2812来说,28335的资料还是比較少的,只是原理是相通的,28335说白 ...

  8. react项目开发中遇到的问题

    前言 作为一个前端爱好者来说,都想在react上一试生手,那么在搭建react项目开发时,肯定会有这样或者那样的问题,尤其是对初学者来说,下面就个人在开发过程中遇到的问题总结一下,好在有google帮 ...

  9. 如何实现从Java入门到服务端项目开发的进阶?

    对于打算入门或者刚刚入门学习Java的人来说,刚开始接触这门学科,往往会觉得不知所措,也会觉得很迷茫.结合前人经验,就从入门到进阶对于Java的学习而言,应该对于学习时间.目标和内容规划有一个清晰的定 ...

随机推荐

  1. LeetCode 7. Reverse Integer

    Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Have you ...

  2. OpenCV人脸识别LBPH算法源码分析

    1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...

  3. JS继承之寄生类继承

    原型式继承 其原理就是借助原型,可以基于已有的对象创建新对象.节省了创建自定义类型这一步(虽然觉得这样没什么意义). 模型 function object(o){ function W(){ } W. ...

  4. [干货来袭]MSSQL Server on Linux预览版安装教程(先帮大家踩坑)

    前言 昨天晚上微软爸爸开了全国开发者大会,会上的内容,我就不多说了,园子里面很多.. 我们唐总裁在今年曾今透漏过SQL Server love Linux,果不其然,这次开发者大会上就推出了MSSQL ...

  5. 移动应用App测试与质量管理一

    测试工程师 基于Html的WebApp测试, 现在一些移动App混Html5 HTML5性能测试 兼容性 整理后的脑图 测试招聘 弱化大量技术考察 看重看问题的高度 看重潜力 测试经验 质量管理 专项 ...

  6. Android Socket连接PC出错问题及解决

    最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.

  7. DBobjectsCompareScript(数据库对象比较).sql

    use master goIF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[func_CompareDBobjectsReColu ...

  8. 项目游戏开发日记 No.0x00000

    14软二杨近星(2014551622) ---恢复内容开始--- 2016-03-17 从开始迈进软件工程专业, 已经快两年了, 记得当初选择软件的理由是, 我要学去做东西, 我享受开发过程. 两年来 ...

  9. BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]

    4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...

  10. 邻接矩阵的深度优先遍历(java版)

    这是一个有向边带权的图 顶点数组:[v0, v1, v2, v3, v4] 边数组: v0 v1 v2 v3 v4 v0 6 v1 9 3 v2 2 5 v3 1 v4 package com.dat ...