Django的简单使用

环境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的简单使用_Django

在指定文件目录中打开终端输出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表

Django的简单使用_Django_02

创建myApp_students表

Django的简单使用_Django_03

配置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可以看到

Django的简单使用_Django_04

Django的简单使用_Django_05

定义视图

修改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

进行前往