AIR

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
# Application definition

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


# 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.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

# from django.conf.urls import url, include

urlpatterns = [
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

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

# Register your models here.

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 # 分页

# 添加、修改页属性
# 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 = False
actions_on_bottom = True

# admin.site.register(Students, StudentsAdmin)

执行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


# 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

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>


 Comments


Blog content follows the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) License

Use Material X as theme , total visits times .
载入天数...载入时分秒...