环境Mac OS X 10.15、Django3.0.5、MySQL8.0.19
文件结构树状图
.├── Demo1 │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── settings.cpython-37.pyc │ │ ├── urls.cpython-37.pyc │ │ └── wsgi.cpython-37.pyc │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── __pycache__ │ └── manage.cpython-37.pyc ├── manage.py ├── myApp │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── admin.cpython-37.pyc │ │ ├── models.cpython-37.pyc │ │ ├── urls.cpython-37.pyc │ │ └── views.cpython-37.pyc │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── __init__.py │ │ └── __pycache__ │ │ ├── 0001_initial.cpython-37.pyc │ │ └── __init__.cpython-37.pyc │ ├── models.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── templates └── myApp ├── grades.html └── students.html
在指定文件目录中打开终端输出Django-admin startproject Dome3(项目名)
├── Dome3 │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py 1 directory, 6 files
在Dome3目录中打开终端输出Django-admin startapp myApp(项目名)
.├── Dome3 │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── manage.py └── myApp ├── __init__.py ├── admin.py ├── apps.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py └── views.py 3 directories, 13 files
创建模板:在项目根目录下创建templates文件夹
配置数据库,Django默认使用的数据库为sqlite,这里我们改为MySQL(需要事先创建好数据库,这里我们已经创建好了Djangotest数据库)
在Dome3目录下
打开_init_.py
import pymysql pymysql.install_as_MySQLdb()pymysql.version_info = (1, 3, 13, "final", 0)
打开setting.py
配置app和数据库、调整地区与语言、绑定模板,找到并修改文件
# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','myApp']
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'Djangotest','USER': 'root','PASSWORD': '******',# 你的数据库密码'HOST': 'localhost','PORT': '3306',}}
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},]
LANGUAGE_CODE = 'zh-Hans'TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True
定义模型
在model.py下
from django.db import models# Create your models here.class Grades(models.Model):gname = models.CharField(max_length=20)gdate = models.DateTimeField()ggirlnum = models.IntegerField()gboynum = models.IntegerField()isDelete = models.BooleanField(default=False)def __str__(self):return self.gnameclass 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', on_delete=models.CASCADE) # 关联外键def __str__(self):return self.sname
创建myApp_grades表
创建myApp_students表
配置url
在Dome3的项目文件夹下的Dome3的urls.py修改文件
from django.contrib import adminfrom django.urls import path, include# from django.conf.urls import url, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('myApp.urls')),# url(r'^admin/', admin.site.urls),# url(r'^', include('myApp.urls')),]
配置管理员后台
在指定目录下终端执行python menage.py createsuperuser,输入用户名、邮箱和密码
打开admin.py
from django.contrib import admin# Register your models here.from .models import Grades, Studentsclass StudentInfo(admin.TabularInline):model = Students extra = 2class GradesAdmin(admin.ModelAdmin):inlines = [StudentInfo]# 列表页属性list_display = ['pk', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete'] # 表头list_filter = ['gname'] # 过滤器search_fields = ['gname'] # 搜索list_per_page = 5 # 分页# 添加、修改页属性# fields = ['ggrilnum', 'gboynum', 'gname', 'gdata', 'isDelete']fieldsets = [('num', {'fields': ['ggirlnum', 'gboynum']}),('base', {'fields': ['gname', 'gdate', 'isDelete']})]admin.site.register(Grades, GradesAdmin)# 装饰器@admin.register(Students)class StudentsAdmin(admin.ModelAdmin):def gender(self):if self.sgender:return '男'else:return '女'# 设置页面名称gender.short_description = '性别'list_display = ['pk', 'sname', 'sage', gender, 'scontend', 'sgrade', 'isDelete']list_per_page = 2# 设置执行动作的位置actions_on_top = Falseactions_on_bottom = True# admin.site.register(Students, StudentsAdmin)
执行Django项目在浏览器中输入 http://127.0.0.1:8000/admin可以看到
定义视图
修改view.py文件
from django.http import HttpResponsefrom django.shortcuts import renderfrom .models import Grades, Students# Create your views here.def index(request):return HttpResponse('hello world')def detail(request, num):return HttpResponse('detail-%s' % num)def grades(request):# 去模板里取数据gradesList = Grades.objects.all()# 将数据传递给模板,模板渲染页面,将渲染好的页面返回给浏览器return render(request, 'myApp/grades.html', {'grades': gradesList})def students(request):studentsList = Students.objects.all()return render(request, 'myApp/students.html', {'students': studentsList})def gradesStudents(request, num):grades = Grades.objects.get(pk=num)studentsList = grades.students_set.all()return render(request, 'myApp/students.html', {'students': studentsList})
添加模板
在templates文件夹上创建myApp文件夹并在其下面创建grades.html以及students.html
grades.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>班级信息</title></head><body><h1>班级信息表</h1><ul>{% for grade in grades %}<li><a href="#">{{ grade.gname }}</a></li>{% endfor %}</ul></body></html>
students.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>学生信息</title></head><body><h1>学生信息列表</h1><ul>{% for student in students %}<li>{{ student.sname }} -- {{ student.scontend }} -- {{ student.sgrade }}</li>{% endfor %}</ul></body></html>
在myApp文件夹下配置URL
from django.conf.urls import urlfrom . import views urlpatterns = [url(r'^$', views.index),url(r'^(\d+)/$', views.detail),url(r'^grades/$', views.grades),url(r'^students/$', views.students),url(r'^grades/(\d+)$', views.gradesStudents)]
可以通过
http://127.0.0.1:8000/grades
http://127.0.0.1:8000/students
http://127.0.0.1:8000/404
http://127.0.0.1:8000/grades/1
进行前往