Django框架基本走通
-
下载django
pip install Django==3.0 pip uninstall Django==3.0 卸载
-
查看版本
>>> import django >>> django.get_version() #查看版本
MVC设计模式
用一种业务逻辑,使数据,界面显示分离的方法组织代码,将业务聚集 到一个
部件里面,在改进和个性定制界面与用户交互的同时,不需要重新
编写业务逻辑
MVC设计模式被独特的发展起来用于映射传统的输入,处理和输出功能
在一个逻辑的图形话界面结构中
核心思想 : 解耦
优点:降低耦合性 , 方便变更 ,容易重构 ,实现了代码重用
-
MVC (model , view ,controller)
model : 用于封装与应用程序的业务逻辑相关的的数据及对数据 的处理方法,是web应用程序中用于处理应用程序的数据逻辑部分, model通常只提供功能性的接口,通过这些接口可以获取model的所有 功能 view: 负责数据的显示和呈现,view是对用户的直接输出 controller : 负责从用户端搜集用户的输入,可以处理交互逻辑
-
MTV (model view template)
model : 负责业务对象与数据库(ORM)的对象 view : 负责业务逻辑,并在适当的时候调用model 和template template : 负责把页面展示给用户 注意: DJango 还有一个url分发器(路由),主要用来将一个url页面的请求 分发给不同的view进行处理,view再调用相应的model和template
创建项目
1.再合适位置创建目录
2.打开cmd 进入上一步创建的目录下
3.输入django-admin startproject 项目名 (例如 django-admin startproject project)
4.目录层级说明:
manage.py:一个命令行工具,可以使我们用多种方式对django进行交互
项目名目录(project目录):
__init__.py :它告诉python这个目录应该被看作python包
settings.py :项目的配置文件
uls.py : url管理器,是项目的url声明
wsgi.py : 项目与WSGI兼容的web服务器入口
基本操作:
-
1.设计表结构
班级表结构-表名 grade -字段 (班级名称gname,成立时间gdate,女生总数ggirlnum,男生总数gboynum,是否删除isdelete) -学生表结构-表名 students - 字段 (姓名sname,性别sgender,年龄sage,简介scontend,从属班级sgrade,是否删除isdelete)
-
2.配置数据库
(注意Django默认使用sqlite3) -在settings.py中,通过DATABASES选项进行数据库配置 -配置mysql - python 安装的是pyMySQL -1.在__init__.py文件中写入两行代码 import pymysql pymysql.install_as_MySQLdb() -2.在settings 中配置这些 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': "数据库名", 'USER':'mysql用户名', 'PASSWORD':'mysql密码', 'HOST':'数据库服务器ip', 'POST':'端口', } }
-
3.创建应用
在一个项目中可以创建多个应用,每个应用进行一种业务处理) - 在cmd 中 进入项目目录下的project文件下 执行 python manage.py startapp 应用名 (例如 python manage.py startapp myApp) (注意:如果报错:找到python的安装路径C:\Users\Shinelon\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\django\db\backends\mysql 运行base.py 将 if version < (1, 3, 13): raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)注释即可) - 应用目录说明: admin.py : 站点配置 models.py: 模型 views.py :视图
-
4.激活应用
在settings.py文件中,将创建好的应用加入到INSTALLED_APPS选项中 (例如 在INSTALLED_APPS 中填写一句代码:'myApp' 即可)
-
5.定义模型
概述:有一个数据表,就对应有一个模型。 在应用目录下的models.py文件中定义模型 引入 :from django.db import models(模型类要继承models.Model类) 编写代码(模型类中的属性对应数据库中表的字段名) 说明 :1.不需要定义主键,在生成时自动添加,并且值为自动增加
-
6.在数据库中生成数据表
1.生成迁移文件 - 在project项目目录下执行cmd命令 :python manage.py makemigrations ("如果报错":解决方案: 在models.py中的关联外键代码中的ForeignKey()里,增加:on delete=models.CASCADE ) - 创建的迁移文件在应用目录下的migrations下的0001_initaial.py(迁移文件) ( 注意:此时数据库还没有生成数据表) 2.执行迁移 :相当于创建数据表 - 在project项目目录下执行cmd命令:python manage.py migrate (“如果报错”(django和mysql版本不兼容问题):在settings.py中添加如下代码: from django.db.backends.mysql.base import DatabaseWrapper DatabaseWrapper.data_types['DateTimeField'] = 'datetime')
-
7.测试数据操作
- 1.在project项目目录下执行cmd命令: python manage.py shell - 2.引入包:在shell中执行: >>>from myApp.models import Grades,Student >>>from django.utils import timezone >>>form datetime import * 数据的增删改查: - 查询所有数据 格式:类名.objects.all() >>> Grades.objects.all() - 添加数据 -本质:创建一个模型类的实例
>>> grade1 = Grades()
>>> grade1.gname = "python04"
>>> grade1.gdate = datetime(year=2020,month=7,day=17)
>>> grade1.ggirlnum = 3
>>> grade1.gboynum=20
>>> grade1.save()
>>> grade2 = Grades()
>>> grade2.gname = "python05"
>>> grade2.gdate = datetime(year=2017,month=2,day=31)
>>> grade2.ggirlnum = 33
>>> grade2.gboynum = 20
>>> grade2.save()
- 查看(获取)指定对象
格式:类名。objects.get(条件)
>>>Grades.objects.get(pk=2) #获取到的是grade2
>>> grade1 = Grades.objects.get(pk=1)
- 修改数据
格式:模型对象.属性=新值
模型对象.save()
>>> grade2.gboynum = 60
>>> grade2.save()
- 删除数据
物理删除:数据库中表里的数据被删除
格式:模型对象.delete()
>>> grade2.delete()
- 关联对象
>>> stu = Student()
>>> stu.sname="luciano"
>>> stu.sgender=False
>>> stu.sage = 22
>>> stu.scontend = "我是luciano"
>>> stu.sgrade = grade1 #外键关联对象grade1
>>> stu.save()
- 获得关联对象的集合
-需求:获取python04班级的所有学生
格式:对象名.小写的关联的类名_set.all()
grade1.student_set.all()
- 需求:创建邹旭尧,属于python04
stu3 = grade1.student_set.create(sname=u'lcuaino',sgender=True,scontend=u'我叫luciano',sage=22)
注意:直接插入到了数据库中 不用save()
-
8.启动服务器
在project项目目录下执行cmd命令: 格式:python manage.py runserver ip:port 说明:如果ip省略代表本机ip 端口号默认8000 例如:python manage.py runserver 概念:这是一个python写的轻量级web服务器,仅仅在开发测试中使用
-
9.Admin站点管理:
概述:内容发布:负责添加、修改、删除内容针对数据库 配置Admin应用 在settings文件中的INSTALLED_APPS 添加 'django.contrib.admin',(默认自动添加) 创建管理员用户 在project项目目录下执行cmd命令:python manage.py createsuperuser Username:luciano Email address: lucianozxy@163.com password :1234567890 管理数据表: 修改admin.py:
#自定义管理页面 添加如下代码
from .models import Grades,Student
# 显示设置班级类
class GradesAdmin(admin.ModelAdmin):
#列表页属性
list_display = ['字段名','...'] #显示字段
list_filter = ['过滤字段'] #过滤器
search_fields = ['搜索字段']#搜索框
list_per_page = 数字 #分页
#添加、修改页属性
fields = ['字段名1','字段名2',....] #给字段排序(不要有pk)
fieldsets = [
("分组名1",{"fields":['字段名1','字段名2'....]}),
("分组名2",{"fields":['字段名1','字段名2'.....]})
]
#显示设置学生类
class StudentAdmin(admin.ModelAdmin):
list_display = ['字段名','...']
list_per_page = 数字 #分页
#注册(提交数据和管理类)
admin.site.register(Grades,GradesAdmin)
admin.site.register(Student,StudentAdmin)
#关联对象
#需求:再创建一个班级的时候可以直接添加几个学生
class StudentInfo(admin.TabularInline):
# 创建一个班级有两个学生
model = Student
extra = 2
class GradesAdmin(admin.ModelAdmin):
#接受关联类
inlines = [StudentInfo]
#bool值显示问题:
class StudentAdmin(admin.ModelAdmin):
#自定以bool值显示问题
def gender(self):
if self.sgender:
return "男"
else:
return "女"
#设置页面字段的名称
gender.short_description = "性别"
#执行动作位置(Action):在显示设置类中
#Aciton的位置
actions_on_top = False #上面没有
actions_on_bottom = True #下面有
-
10.视图的基本使用
-在django中,视图对web请求进行回应 视图就是python的函数,在views.py文件中定义 1.定义视图(定义函数) from django.http import HttpResponse def index(request): return HttpResponse("luciano is good man") def detail(request,num): return HttpResponse("detail-%s"%num) 2.修改project文件下的urls.py from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('',include('myApp.urls')), #若文件在同级目录则不用写父级目录名,非同级目录要写父级目录下的指定文件 ] 3.在myApp应用目录下创建一个urls.py文件(re_path支持正则) from django.urls import path,re_path from . import views #当前目录下的views urlpatterns = [ path('',views.index), re_path(r'^(\d+)/$',views.detail), ]
-
11.模板的基本使用
概述:模板是HTML页面,可以是根据视图中传递过来的数据进行填充 1.创建模板目录 -在myApp、project同级目录下创建templates目录,然后在templates下在创建一个应用模板目录(项目名/project/templates/myApp) 2.配置模板路径 -修改settings.py文件下的TEMPLATES 'DIRS': [os.path.join(BASE_DIR,'templates')], 3.定义模板grades.html 和 student.html 模板语法:{{输出值,可以是变量,可以是对象.属性}} {%执行代码段%} 需求一:输入http://127.0.0.1:8000/grades 显示班级信息 -1.写grades.html模板 <ul> {%for grade in grades%} <li> <a href="#">{{grade.gname}}</a> </li> {%endfor%} </ul> -2.定义视图 在views.py from .models import Grades, Student def grades(request): # 去模板里面取数据 gradesList = Grades.objects.all() # 将数据传递给模板,模板在渲染页面,将渲染好的页面返回给浏览器 return render(request,'myApp/grades.html',{"grades":gradesList}) -3.配置urls.py re_path(r'^grades/$',views.grades)