摘要:简介是一个开放源代码的应用框架,由写成,初次发布于年月,并于年月发布了第一个正式版本是一种软件设计典范,核心思想是解耦优点降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现了代码重用图解模型是应用程序中用于处理程序逻辑的部
Django简介
Django是一个开放源代码的Web应用框架,由python写成,初次发布于2005年7月,并于2008年9月发布了第一个正式版本1.0
MVC:MVC是一种软件设计典范,核心思想是解耦
MVC优点:降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现了代码重用
MVC 图解Model(模型):是应用程序中用于处理程序逻辑的部分,负责数据库中存储数据
View(视图):是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的
Controller(控制器):是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
Django的MTV本质与MVC模式没有区别,只是定义形式不同
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模板):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
MTV图解 创建工程# 黑屏终端,进入指定目录 创建工程 django-admin startproject project基本操作 数据库配置
Django默认使用SQLite数据库,如果需要使用如mysql等数据库需要在setting.py文件中配置
配置SQL在__init__.py文件中增加代码(py2.x无需操作)
# __init__.py import pymysql pymysql.install_as_MySQLdb()
# settings.py DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "py03", "USER":"root", "PASSWORD":"123456", "HOST":"localhost", "PORT":"3306", } } ------- DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "数据库名称", "USER": "用户名", "PASSWORD": "密码", "HOST": "数据库服务器ip", "PORT": "端口号", } }创建应用
在一个工程中可以创建一个到多个应用,每个应用处理一种业务逻辑
打开黑屏终端进入工程目录下 python manage.py startapp myApp
目录结构:
├── db.sqlite3 # 数据库 ├── myApp # 一个应用 │ ├── admin.py # 管理 │ ├── apps.py # 应用的配置 │ ├── __init__.py │ ├── migrations # model到数据库映射的中间文件 │ │ └── __init__.py │ ├── models.py # model │ ├── tests.py # 在这里可以写测试代码 │ └── views.py # 视图 ├── project # 创建项目时创建的目录 │ ├── __init__.py │ ├── settings.py # 项目的配置文件 │ ├── urls.py # 根路由 │ └── wsgi.py └── manage.py
# setting.py INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "myApp", ]启动服务
python manage.py runserver ip:port
ip可以不写 python manage.py runserver
端口默认8000,可以多带带修改 python manage.py runserver port
定义模型modeles.py
from django.db import models # Create your models here. class Grade(models.Model): name = models.CharField(max_length=20) boyNum = models.IntegerField() girlNum = models.IntegerField() isDelete = models.BooleanField(default=False) def __str__(self): return self.name class Student(models.Model): name = models.CharField(max_length=20) sex = models.BooleanField() age = models.IntegerField() content = models.CharField(max_length=40) # 关联类名的小写加引号或者直接类名 grade = models.ForeignKey("grade") isDelete = models.BooleanField(default=False) def __str__(self): return self.name
说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长
生成数据表生成迁移文件:python manage.py makemigrations
作用: 在应用目录下的migrations目录下成迁移文件
查看建表语句: python manage.py sqlmigrate APP名字 0001
说明:0001为makemigrations之后产生了0001_initial.py文件
执行迁移: python manage.py migrate
作用:相当于执行sql语句生成数据表,表名为 应用名全小写_类名全小写
# 进入pyhton shell模式 python manage.py shell # 引入包 from myApp.models import Grade,Student # 增 >>> grade = Grade() >>> grade.name = "python01" >>> grade.boyNum = 50 >>> grade.girlNum = 10 >>> grade.save() >>> stu = Student() >>> stu.name = "sunck" >>> stu.sex = "True" >>> stu.age = 18 >>> stu.contend = "sunck is a good man" >>> stu.grade = grade >>> stu.save() # 删 stu.delete() # 改 >>> stu.age = 17 >>> stu.save() # 查 stus = Student.objects.all() grade = Grade.objects.get(pk=1)视图的基本使用 概述:
在Django中视图对WEB请求进行响应的,视图的本质是python中的函数,在views.py文件中定义,
视图接收request对象作为第一个参数,包含了请求的信息
定义视图view.py
from django.shortcuts import render from django.http import HttpResponse from myApp.models import Grade, Student def index(request): return HttpResponse("sunck is a good man") def detail(request, num): return HttpResponse("detail %s" % num)配置路由
主路由:与工程名相同名字的目录下的urls.py文件
配置文件:ROOT_URLCONF = "project.urls"
urls.py
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r"^admin/", admin.site.urls), # 包含子路由 url(r"^", include("myApp.urls")), ]
子路由:在应用目录下创建名为urls.py的文件
作用:路由分发,规定哪个网址由哪个视图处理
urls.py
from django.conf.urls import url from myApp import views urlpatterns = [ # 路由匹配 url(r"index/", views.index), url(r"detail/(d+)/", views.detail), ]模板的基本使用
概述:模板是HTML界面,可以根据视图传递的数据进行填充
创建模板目录:工程目录下创建名为templates的目录,也可以放在项目目录中
配置模板路径:settings.py
TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [os.path.join(BASE_DIR, "templates")], "APP_DIRS": True, }定义模板
grade.html
班级信息 班级信息
student.html
学生信息 学生信息
在视图中返回模板
views.py
from myApp.models import Grade, Student def students(request): #获取所有学生信息列表 stus = Student.objects.all() return render(request, "students.html", {"stusList":stus}) def grades(request): grades = Grade.objects.all() return render(request, "grades.html", {"grades": grades}) def gstudents(request, gid): stus = Student.objects.filter(grade_id=gid) return render(request, "students.html", {"stusList":stus})
urls.py
url(r"students/grade/(d+)/", views.gstudents),
2-Django——模型
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41921.html
摘要:而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用,表明这是多对多的关联关系。理解多对一和多对多两种关联关系我们分别使用了两种关联数据库表的形式和。表明一种一对多的关联关系。 设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个地方就是数据库。我们把写好的文章永久地保存在数据库里,...
阅读 3702·2021-11-11 16:55
阅读 1648·2021-10-08 10:04
阅读 3583·2021-09-27 13:36
阅读 2765·2019-08-30 15:53
阅读 1860·2019-08-30 11:17
阅读 1261·2019-08-29 16:55
阅读 2101·2019-08-29 13:57
阅读 2518·2019-08-29 13:13