Django之常用命令以及问题汇总
基本命令
1、新建一个django项目
django-admin.py startproject project-name
2、新建一个app
python manage.py startapp app-name
3、同步数据库
python manage.py syncdb
注意:Django 1.7.1及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate
这种方法可以创建表,当你在models.py中新增了类时,运行它就可以自动在数据库中创建表了,不用手动创建。
备注:对已有的 models 进行修改,Django 1.7之前的版本的Django都是无法自动更改表结构的,不过有第三方工具south
4、运行开发服务器
python manage.py runserver 0.0.0.0:8000
5、清空数据库
python manage.py flush
此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。
6、创建超级管理员
python manage.py createsuperuser
7、导出数据、导入数据
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
8、django项目环境终端
python manage.py shell
如果你安装了bpython或者ipython,会自动调用他们的界面
9、数据库执行命令
python manage.py dbshell
django会进行到settings中设置的数据库,如果是mysql或者postgresql,会要求输入用户名和密码
在这个终端可以输入sql语句
10、更多命令
在终端上输入python manage.py 回车,就可以看到详细的列表
问题收集:
生成同步数据库的脚本:python manage.py makemigrations
同步数据库: python manage.py migrate
注意:在开发过程中,数据库同步误操作之后,难免会遇到后面不能同步成功的情况,解决这个问题的一个简单粗暴方法是把migrations目录下
的脚本(除__init__.py之外)全部删掉,再把数据库删掉之后创建一个新的数据库,数据库同步操作再重新做一遍。
提示: 如若要从models里修改表,可以再次运行
python manage.py makemigrations
python manage.py maigrate
如果class里 字段没有默认值会报错,解决方式如下:
age = models.IntegerField() # 这里没写默认值 报错:You are trying to add a non-nullable field 'age' to userinfor without a default; we can't do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows with a null value for this column) 2) Quit, and let me add a default in models.py Select an option: 选择2退出,或者age = models.IntegerField(null=True) ; age = models.IntegerField(default=1) 设置空,或者默认值 然后继续,python manage.py makemigrations python manage.py migrate
对Django数据库操作的记录都在这:
使用Model对数据库进行增删改查:
1、views.py 访问index路径时,执行这个添加的函数
def index(req):
from app_01 import models
#增
# models.UserGroup.objects.create(title='销售部')
# models.UserInfor.objects.create(user='root',password='pwd',age=18,ug_id=1)
#查
# group_list = models.UserGroup.objects.all()
#group_list = models.UserGroup.objects.filter(id=1)
# print(group_list)
# 这里代码是从上至下执行,filter 是筛选器,配合了不起的 双下划线 __
#group_list = models.UserGroup.objects.filter(id__gt=1).first() #只取第一个
#group_list = models.UserGroup.objects.filter(id__lt=1)
#删除
# group_list = models.UserGroup.objects.filter(id=1).delete()
#改
group_list = models.UserGroup.objects.filter(id=1).update(title='打鸟不')
group_list = models.UserGroup.objects.all()
#group_list QuerySet类型(列表)
#QuerySet类型[obj,obj,obj]
# print(group_list)
#for i in group_list:
# print(i.id,i.title)
#return HttpResponse("....ok") #这里将数据显示到了后台
return render(req,'newindex.html',{'group_list':group_list}) #这里将数据显示到前端
2、urls.py 和 index.html
urlpatterns = [ url(r'index/',views.index) } #路由系统
------------------------------------------------------------
{% for row in group_list %}
<li>
{{ row.id }}----{{ row.title }}
</li>
{% endfor %} #前端遍历代码
3、models.py 外键约束
# Create your models here. from django.db import models class UserGroup(models.Model): title = models.CharField(max_length=32) #一个部门可以对应多个用户 # 一 对 多, 多的表 添加外键 class UserInfor(models.Model): nid = models.BigAutoField(primary_key=True) user = models.CharField(max_length=32) password = models.CharField(max_length=64) age = models.IntegerField(default=1) ug = models.ForeignKey("UserGroup",null=True) #默认生成一个 ug_id 外键列
4、查看数据库多了‘销售部’了吗
成功添加
类代指表,对象代指数据