Django的简单使用
环境Mac OS X 10.15、Django3.0.5、MySQL8.0.19
文件结构树状图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| . ├── 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(项目名)
1 2 3 4 5 6 7 8 9
| ├── Dome3 │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py
1 directory, 6 files
|
在Dome3目录中打开终端输出Django-admin startapp myApp(项目名)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| . ├── 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
1 2 3 4 5
| import pymysql
pymysql.install_as_MySQLdb()
pymysql.version_info = (1, 3, 13, "final", 0)
|
打开setting.py
配置app和数据库、调整地区与语言、绑定模板,找到并修改文件
1 2 3 4 5 6 7 8 9 10 11
|
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myApp' ]
|
1 2 3 4 5 6 7 8 9 10
| DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'Djangotest', 'USER': 'root', 'PASSWORD': '******', 'HOST': 'localhost', 'PORT': '3306', } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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', ], }, }, ]
|
1 2 3 4 5 6 7 8 9
| LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
|
定义模型
在model.py下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| from django.db import models
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.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', on_delete=models.CASCADE)
def __str__(self): return self.sname
|
创建myApp_grades表

创建myApp_students表

配置url
在Dome3的项目文件夹下的Dome3的urls.py修改文件
1 2 3 4 5 6 7 8 9 10 11
| from django.contrib import admin from django.urls import path, include
urlpatterns = [ path('admin/', admin.site.urls), path('', include('myApp.urls')), ]
|
配置管理员后台
在指定目录下终端执行python menage.py createsuperuser,输入用户名、邮箱和密码
打开admin.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| from django.contrib import admin
from .models import Grades, Students
class StudentInfo(admin.TabularInline): model = Students extra = 2
class GradesAdmin(admin.ModelAdmin): inlines = [StudentInfo] list_display = ['pk', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete'] list_filter = ['gname'] search_fields = ['gname'] list_per_page = 5
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 = False actions_on_bottom = True
|
执行Django项目在浏览器中输入 http://127.0.0.1:8000/admin可以看到


定义视图
修改view.py文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| from django.http import HttpResponse from django.shortcuts import render from .models import Grades, Students
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!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
1 2 3 4 5 6 7 8 9 10 11 12
| from django.conf.urls import url from . 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
进行前往
<\fancybox>