1. 安装Python
下载链接:https://www.python.org/getit/
我这边下载的是3.6.5的版本的执行版本,安装过程中选择自动安装pip
2.安装django
pip install Django==1.11
3.创建项目
django-admin startproject project
4.创建一个应用
先进入到创建的项目目录下,然后执行
python manage.py startapp myApp
目录结构如下:
django默认使用的数据库为sqlite3数据库,如果需要使用mysql数据库需要修改settings.py文件
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, ‘NAME‘: ‘project20180504‘, ‘USER‘:‘root‘, ‘PASSWORD‘:‘root‘, ‘HOST‘:‘localhost‘, ‘PORT‘:‘3306‘, } }
ENGINE 表示数据库的引擎名称,NAME 为数据库的名称USER为数据库的用户名PASSWORD为数据库用户名密码HOST为IPPORT为端口号 修改完毕后,需要用到mysql还需要在project\myApp\__init__.py文件中声名
import pymysqlpymysql.install_as_MySQLdb()如果显示pymysql未安装,可以使用pip install pymsql安装 我这边安装pymysql时候报错提示需要升级pip到10.0.1执行python -m pip install --upgrage pip 即可 。 创建数据:修改myApp下的models.py文件
#coding=utf-8 from django.db import models # Create your models here. class Grades(models.Model): gname=models.CharField(max_length=20) gdate=models.DateTimeField() ggilrnum=models.IntegerField() gboynum=models.IntegerField() isDelete=models.BooleanField(default=False) def __str__(self): return self.gname class Students(models.Model): sname=models.CharField(max_length=20) sgender=models.BooleanField(default=True) sage=models.IntegerField() scontend=models.CharField(max_length=20) isDelete=models.BooleanField(default=False) #关联外键 sgrade=models.ForeignKey("Grades") def __str__(self): return self.sname
定义了一个班级表,包含班级名称,创建日期,女生数目,男士数目,是否删除字段
定义了一个学生表,包含学生姓名,学生性别,学生年龄,学生介绍,是否删除,所属班级,其中所属班级关联外键 。
执行
python manage.py makemigrations
将会生成迁移数据,在project\myApp\migrations\0001_initial.py文件中会生成如下内容
# -*- coding: utf-8 -*- # Generated by Django 1.11 on 2018-05-04 12:31 from __future__ import unicode_literals from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name=‘Grades‘, fields=[ (‘id‘, models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name=‘ID‘)), (‘gname‘, models.CharField(max_length=20)), (‘gdate‘, models.DateTimeField()), (‘ggilrnum‘, models.IntegerField()), (‘gboynum‘, models.IntegerField()), (‘isDelete‘, models.BooleanField(default=False)), ], ), migrations.CreateModel( name=‘Students‘, fields=[ (‘id‘, models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name=‘ID‘)), (‘sname‘, models.CharField(max_length=20)), (‘sgender‘, models.BooleanField(default=True)), (‘sage‘, models.IntegerField()), (‘scontend‘, models.CharField(max_length=20)), (‘isDelete‘, models.BooleanField(default=False)), (‘sgrade‘, models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=‘myApp.Grades‘)), ], ), ]
此时进入mysql中查看发现表依然不存在,此时需要执行
python manage.pu migrate
此时会自动将数据表创建完毕 ,但是此时的数据表中是没用内容的。
测试数据:
使用django手动向数据表中增、删、改、查数据
首先进入python的shell环境中
python manage.py shell
首先导入包
from myApp.models import Grades,Students from django.utils import timezone from datetime import *
执行Grades.objects.all() 命令可以查看Grades中对象,此时为空,那么我们给它创建对象
grade1=Grades()
然后给对象的属性赋值
grade1.gname="python04" grade1.gdate=datetime(year=2018,month=5,day=5) grade1.ggilrnum=10 grade1.gboynum=30
此时对象中已经有数据,但是查询数据表发现表中还是空的,那是因为还需要执行grade1.save()命令将数据保存进去 。
grade1.save()
此时新增一个数据已经完成,按照这个方法可以添加多个对象 。
查询数据:使用如下命令可以查询第一条数据
Grades.objects.get(pk=1)
数据表中默认都有个id字段,并且这个字段是自动递增的,pk=1表示第一条记录,如果取所有的,那么使用Grades.objects.all()命令
但是显示的数据并不是很好看,可以通过修改myApp下的models.py文件的__str__(self)方法来定义输出格式,上面我们已经定义只输出名称,也可以定义输出其他内容 。
修改数据:
grade1.gboynum=100 grade1.save()
修改男士数目为100,然后保存,会发现数据表中数据已经发生变化
删除数据:
grade1.delete() #物理删除
启动服务:
python manage.py runserver
创建超级用户
python manage.py createsuperuser
然后根据提示创建超级用户名密码。
创建完毕后登陆http://127.0.0.1:8000/admin 可以进入登陆界面
修改myApp下的admin.py文件:
#coding=utf-8 from django.contrib import admin # Register your models here. from .models import Grades,Students # class StudentsInfo() class GrandesAdmin(admin.ModelAdmin): #列表属性 list_display = [‘pk‘,‘gname‘,‘gdate‘,‘ggilrnum‘,‘gboynum‘,‘isDelete‘] #过滤器 list_filter =[‘gname‘] #按字段搜索 search_fields =[‘gname‘] #分页 list_per_page =5 #添加,修改属性 #添加属性先后顺序 #fields = [‘gname‘,‘ggilrnum‘,‘gboynum‘,‘gdate‘,‘isDelete‘] fieldsets = [ ("num",{"fields":[‘ggilrnum‘,‘gboynum‘]}), ("base",{"fields":[‘gname‘,‘gdate‘,‘isDelete‘]}), ] class StudentsAdmin(admin.ModelAdmin): list_display = [‘pk‘,‘sname‘,‘sgrade‘,‘sgender‘,‘sage‘,‘scontend‘,‘isDelete‘] list_filter =[‘sname‘,‘sgrade‘] search_fields =[‘sname‘] list_per_page =10 fields = [‘sname‘,‘sgrade‘,‘sgender‘,‘sage‘,‘scontend‘,] #注册 admin.site.register(Grades,GrandesAdmin) admin.site.register(Students,StudentsAdmin)
其中admin.site.register(Grades)和admin.site.register(Students) 可以将班级表和学生表注册进去,在界面上可以查看操作 。
上面的GrandesAdmin和StudentsAdmin则定义了增加,修改,查看数据的方式 。
效果如下:
列表属性,让数据显示存在标题 。
右边会存在一个过滤器,显示所有的班级名称
search_fields 会使之出现一个搜索框分页属性则是当数据量超过定义的值是将分多页显示 。
fieldsets 则是将属性分组 。
fields则可以定义先后顺序,跟fieldsets 不可同时出现 。
原文地址:https://www.cnblogs.com/catxjd/p/8994415.html