Django项目上手
1.框架
什么是框架
- 软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品,
- 框架的功能类似于基础设施 ,提供并实现最为基础的软件架构和体系
- 通常情况下我们依据框架来实现更为复杂的业务程序开发
- 二个字,框架就是程序的骨架
Python 中常见的框架
- 大包大揽 Django 被官方称之为完美主义者的Web框架。
- 力求精简 web.py 和 Tornado
- 新生代微框架 Flask 和 Bottle
2.Django框架
Django框架介绍
- Django 是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计。
- 由经验丰富的开发人员构建,它负责Web开发的许多麻烦,因此您可以专注于编写应用程序。
- 免费的和开源的。
- 被官方称之为完美主义者的Web框架。
- 官方网址:https://www.djangoproject.com/
Django框架的特点
-
快得多
Django旨在帮助开发人员尽快将应用程序从概念到完成。 -
令人放心的安全。
Django非常重视安全性,并帮助开发人员避免许多常见的安全错误。 -
超出可扩展性。
Web上一些最繁忙的站点利用了Django快速灵活扩展的能力。
3.Django快速入门:后台管理
1.创建Django项目:
创建后项目目录会出现以下:
目录说明:
- manage.py :一个命令行工具,可以使你用多种方式对 Django 项目进行交互
- 内层的目录:项目的真正的Python包
- init.py :一个空文件,它告诉Python这个目录应该被看做一个Python包
- settings.py :项目的配置
- urls.py :项目的URL声明
- wsgi.py :项目与 WSGI 兼容的Web服务器入口
2.应用的创建和使用
1.创建第一个应用程序
- 在Terminal中输入:python3 manage.py startapp bookApp
- 目录结构如下图
2.编写视图函数
打开文件 bookApp/views.py 并放入以下Python代码:
from django.http import HttpRequest, HttpResponse
# Create your views here.
# 视图函数(处理逻辑):django所有的视图函数接收请求,返回响应
def index(request):
return HttpResponse('书籍管理系统')
def login(request):
return HttpResponse('登陆')
def logout(request):
return HttpResponse('注销')
def register(request):
return HttpResponse('注册')
在Terminal中 python manage.py runserver 6789,显示启动
浏览器中分别访问显示如下:
3.路由规则
要在 bookApp 目录中创建一个 URLconf ,创建一个名为 urls.py 。
from django.contrib import admin
from django.urls import path, include
from bookApp.views import index, login, register, logout, detail
urlpatterns = [
path('', index, name='index'),
# <int:id>, <str:name> Django2
path('<int:id>/', detail, name='detail'),
path('login/', login, name='login'),
path('logout/', logout, name='logout'),
]
根据配置文件 BookManage/settings 可知路由查找的主文件是 BookManage/urls.py , 因此在该文件
添加一条 url 规则:
from django.contrib import admin
from django.urls import path, include
from bookApp.views import index, login, register, logout
urlpatterns = [
path('admin/', admin.site.urls),
path('book/', include('bookApp.urls')),
]
4.启动服务
在Terminal中 python manage.py runserver
浏览器访问成功
3.项目的数据库模型
1.数据库创建
在pycharm右上角选择Database,点击加号,选择默认的数据库SQLite。
选择相对应的File与URL
2.创建数据库模型
编辑bookApp/models.py
from django.db import models
# 类->数据库表
class Book(models.Model):
# 属性 -> 数据库的列名称
title = models.CharField('图书名称', max_length=100)
# auto_now=True,每次save时自动更新时间,auto_now_add=True,新建时自动生成时间,后续不会修改
pub_date = models.DateField('图书发布时间', auto_now_add=True)
change_time = models.DateTimeField('最后一次更改时间', auto_now=True)
def __str__(self):
return self.title
class Meta:
verbose_name = '图书管理'
verbose_name_plural = verbose_name
# 对象->数据库表的一条记录: b = Book(title='xxx')
class Hero(models.Model):
gender_chioce = (
(1, '男'),
(2, '女'),
(0, '其他'),
)
name = models.CharField("人物名称", max_length=20)
gender = models.IntegerField("性别", choices=gender_chioce)
content = models.CharField("人物描述", max_length=100)
# 所属图书-外键关联, 书籍:人物=1:N(一对多关系,外键写在多的一端)
hbook = models.ForeignKey(Book, on_delete=models.CASCADE) # 级连删除
def __str__(self):
return self.name
class Meta:
verbose_name = '人物管理'
verbose_name_plural = verbose_name
3.生成数据库表
激活模型:编辑 settings.py 文件,将应用加入到 INSTALLED_APPS 中
生成迁移文件:根据模型类生成 sql 语句
python manage.py makemigrations
4.启用后台Admin 站点管理
1.数据库迁移
python manage.py makemigrations
python manage.py migrate
2.创建管理员用户
python manage.py createsuperuser
- 启动服务器,通过 “127.0.0.1:8000/admin” 访问,输入上面创建的用户名、密码完成登录
- 进入管理站点,默认可以对 groups、users 进行管理
3.管理界面本地化
编辑 settings.py 文件,设置编码、时区
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
4.自定义模型加入后台管理
打开 bookApp/admin.py 文件,注册模型
from django.contrib import admin
from bookApp.models import Book, Hero
# Register your models here.
class HeroInline(admin.StackedInline):
model = Hero
extra = 2
class BookAdmin(admin.ModelAdmin):
# 列表页可以设置的信息
# list_display:显示字段,可以点击列头进行排序
list_display = ['id', 'title', 'pub_date']
# list_filter:过滤字段,过滤框会出现在右侧
list_filter = ['title']
# search_fields:搜索字段,搜索框会出现在上侧
search_fields = ['title']
# list_per_page:分页,分页框会出现在下侧
list_per_page = 10
inlines = [HeroInline]
class HeroAdmin(admin.ModelAdmin):
# 列表页可以设置的信息
# list_display:显示字段,可以点击列头进行排序
list_display = ['id', 'name', 'gender', 'hbook']
# list_filter:过滤字段,过滤框会出现在右侧
list_filter = ['name', 'hbook']
# search_fields:搜索字段,搜索框会出现在上侧
search_fields = ['name']
# list_per_page:分页,分页框会出现在下侧
list_per_page = 10
# 添加、修改页属性
# fields:属性的先后顺序
fields = ['name', 'hbook', 'gender', 'content']
admin.site.register(Book, BookAdmin)
admin.site.register(Hero, HeroAdmin)