美文网首页
Django基本流程

Django基本流程

作者: 仙灵儿 | 来源:发表于2018-07-21 22:58 被阅读254次

一、Django简介

Django是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!

初次发布于2005年7月,并于2008年发布了第一个正式版本1.0。

二、Django特点

强大的数据库功能: 拥有强大的数据库操作接口(QuerySet API),如需要也能执行原生SQL。

自带强大的后台: 几行简单的代码就让你的网站拥有一个强大的后台,轻松管理内容!

优雅的网址: 用正则匹配网址,传递到对应函数,随意定义,如你所想!

模板系统: 强大,易扩展的模板系统,设计简易,代码,样式分开设计,更容易管理。

(注:前后端分离时,也可以用Django开发API,完全不用模板系统。)

缓存系统,与Memcached, Redis等缓存系统联用,更出色的表现,更快的加载速度。

国际化,完全支持多语言应用,允许你定义翻译的字符,轻松翻译成不同国家的语言。

三、MVC模式

MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件中,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

MVC

- Model(模型)

    应用程序中用于处理应用程序数据逻辑部分;

    通常模型对象负责在数据库中存取数据;

- View(视图)

    应用程序中处理数据显示部分;

    通常视图是依据模型数据创建的;

- Controller(控制器)

    应用程序中处理用户交互部分;

    通常控制器负责从视图中读取数据,控制用户输入,并向模型发送数据;

优点: 降低各个功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用。

四、MTV模式

本质上MTV与MVC模式没有什么区别,也是各组件之间为了保持松耦合关系,只是定义上有些不同。

MTV

- View(视图)

    负责业务逻辑,并在适当的时候调用Model和Template

Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template。

五、Django环境搭建

Django版本选择

pip安装(如果有直接跳过)

- 下载get-pip.py文件(Linux, Mac OSX, Windows都可用)https://bootstrap.pypa.io/get-pip.py- 安装(在终端中运行)    $ python get-pip.py备注:    当Python2.x和Python3.x共存的时候要区分是哪个版本需要安装;

pip更新(Linux或MacOS): pip install -U pip

pip更新(Windows): python -m pip install -U pip

安装Django

- 安装    $ pip install Django==1.11.4- 验证是否成功()   

进入到python环境(终端中输入python)

>>> import django

>>> django.get_version()'1.11.4'

六、Django项目创建

新建Django项目:   

$ django-admin startproject projectName目录层级说明:   

manage.py 一个命令行工具,可以使我们多种方式对Django项目进行交互    projectName/__init__.py 一个空文件,告诉python这个目录被看做一个python包(有这个能称之为包)   

projectName/settings.py 项目的配置文件   

projectName/urls.py  项目URL声明   

projectName/wsgi.py    项目与WSGI兼容的Web服务器入口

备注: Linux或Mac下,直接在终端中操作;而在Windows中在cmd中操作(开始 -> 搜索cmd)

七、设计表结构

班级表

表名: grades字段: 序号id、班级名gname、开班时间gdate、男生数量gboynum、女生数量ggirlnum、是否删除isdel

学生表

表名: students字段: 序号id、学生名sname、性别ssex、年龄sage、班级sclass、简介sbrief、是否删除isdel

八、配置数据库

在__init__中添加两行代码 (确保安装mysql,另外需要pip3 install pymysql)

importpymysqlpymysql.install_as_MySQLdb()

python3安装的是PxMysql (和python2是不一样的)

在settings.py中修改默认数据库

DATABASES = {'default': {

# 修改为

mysql'ENGINE':'django.db.backends.mysql',

# 必须先创建有对应的数据库

'NAME':'zyz',

# 用户名

'USER':'root',

# 密码

'PASSWORD':'123456’,

        # 主机

        'HOST': '127.0.0.1',

        # 端口号

        'POST': '3306’    }}

Django默认使用SQLine数据库

九、创建应用

要先进入项目目录下,cd projectName然后执行下面的命令:

$ python3 manage.py startapp appName

项目文件说明:

    admin.py 站点配置

    models.py 模型

    views.py 视图

其实一个项目中可以创建多个应用;

十、激活应用

在settings.py文件中,将appName应用加入到INSTALL_APPS选项中.

INSTALLED_APPS = ['django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'appName'# 添加自己的应用]

十一、定义模型

班级表

# 班级表

GradesclassGrades(models.Model)

:# 对应字段,以及字段类型

# id          = models.IntegerField()

gname      = models.CharField(max_length=30)   

gdate      = models.DateField()   

gboynum    = models.IntegerField()   

ggirlnum    = models.IntegerField()   

isdel      = models.BooleanField(default=False)

需要引入from django.db import models。模型类要继承models.Model类。

学生表

# 学生表

StudentsclassStudents(models.Model):

# 自定义模型管理器

studentObj1 = models.Manager()   

studentObj2 = StudentsManager()

# 在没有添加主键时,它会在生成时自动添加主键

# id          = models.IntegerField()

sname      = models.CharField(max_length=30)   

ssex        = models.CharField(max_length=10)   

sage        = models.IntegerField()   

sbrief      = models.CharField(max_length=50)  

isdel      = models.BooleanField(default=False)

# 关联外键(学生都会有一个班级)

sclass = models.ForeignKey('Grades')

十二、数据库中生成对应表单

生成迁移文件

$ python3 manage.py makemigrations

备注: 在migrations目录中生成一个迁移文件,此时数据库中还没生成表单

执行迁移

$ python3 manage.py migrate

备注: 相当于执行了MySQL语句创建了表单(appname_students、appname_grades)

十三、测试数据库表单操作

- 进入到Python shell   

$ python3 manage.py shell   

- 引入包   

from myapp.models import Grades,Students  

from django.utils import timezone   

from datetime import *

- 查询所有数据  

Grades.objects.all()   

备注: 在模型类中,其实会有一个隐藏属性objects-

添加数据(创建对象)

>>> grade = Grades()

>>> grade.gname ='python04'

>>> grade.gdate = datetime(year=2018,month=5,day=27)

>>> grade.gboynum =30>>> grade.ggirlnum =20

>>> grade.save()

# 只有执行保存,才会往数据库中插入数据备注: 添加数据本质,就是创建一个模型类的对象实例- 查看数据(查看对象)   

Grades.objects.get(pk=1)   

Grades.objects.get(pk=2)

- 修改数据(修改对象属性)   

g = Grades.objects.get(pk=1)   

g.gboynum =70g.save()   

- 删除数据   

g.delete()

# 物理删除,即数据库中表单数据被删除

- 关联对象

# 获取到班级对象 (pk即是id那个字段)

>>> grade = Grades.objects.get(pk=2)

# 添加学生对象

>>> stu1 = Students()

>>> stu1.sname ='王大帅'

>>> stu1.ssex ='男'

>>> stu1.sage =18

>>> stu1.sbrief ='我住隔壁,我姓王,你有事情我帮忙'

>>> stu1.sclass = grade

# 这个即是关联上对象,如果没有管理,执行save会报错

>>> stu.save()

>>> stu2 = Students()

>>> stu2.sname ='李花花'

>>> stu2.ssex ='女'

>>> stu2.sage =18

>>> stu2.sbrief ='你负责赚钱养家,我负责貌美如花.'

>>> stu2.sclass = grade

>>> stu2.save()   

- 获取关联对象    语法:        对象.关联的类名小写_set.all()  

例如:          grade.students_set.all()  

备注: 在班级中,想要获取某个班级中关联的学生信息    需求: python04班级存在,  如何快速关联上快速创建对应学生?

# 可以直接通过以下方法创建,并且不需要调用保存 (但班级是python04而不是python05)

# 其实就是直接grade和创建的学生对象关联起来了

stu3 = grade.students_set.create(sname='王八',ssex='男',sage=20,sbrief='哈哈,咬我啊..')

十四、启动服务器

语法:python3manage.pyrunserverip:port

例如:python3manage.pyrunserver

备注:IP可以不写,代表即是本机IP端口号默认是8000   

启动成功后,在浏览器可以看到”Itworked!”

说明:    这是一个纯python写的轻量级web服务器,仅仅在开发测试阶段中使用

十五、Admin站点管理(后台可视化界面操作)

概述

内容发布: 负责添加、修改、删除内容

公告访问

配置Admin应用

在`settings.py`文件中的IINSTALLED_APPS中添加'django.contrib.admin'(默认是已经是添加好的)

创建管理员用户

$ python3 manage.py createsuperuser

访问站点管理

语法: ip:端口号/admin

例如: 192.168.0.13:8000/admin

站点管理的汉化版

在settings.py中替换以下内容即可    LANGUAGE_CODE ='en-us'替换 LANGUAGE_CODE ='zh-Hans'TIME_ZONE ='UTC'替换 TIME_ZONE ='Asia/Shanghai'

管理数据表(后台界面中)

修改admin.py文件:  

# 引入

from.modelsimportGrades,Students

# 注册

admin.site.register(Grades)admin.site.register(Students)

自定义管理数据页面(因为原本页面显示不够友好)

# 自定义管理数据页面

# 该类需要注册时添加进去

classGradesAmin(admin.ModelAdmin):

# 列表页的属性

# 显示字段(需要显示什么字段,就写上什么字段即可)

list_display = ['pk','gname','gdate','gboynum','ggirlnum','isdel']

# 过滤器(过滤字段)

list_filter = ['gname']

# 搜索字段

search_fields = ['pk']# 分页(多少条为一页)list_per_page =5

# 添加、修改页属性# 属性的先后顺序

fields = ['gboynum','gname','gdate','ggirlnum','isdel']

# 给属性分组(fields和fieldsets不能同时使用)

fieldsets = [              

('num',{'fields':['gboynum','ggirlnum']}),               

('base',{'fields':['gname','gdate','isdel']}),   

]

# 注册(以后其实不会在这里完成注册,会通过装饰器完成注册!)

admin.site.register(Grades,GradesAmin)

自定义管理页面(关联对象)

需求: 在创建班级时,可以直接添加几个学生

# TabularInline 或 StackedInline 两种显示方式

classStudentsInfo(admin.TabularInline):

# 要创建学生

model = Students

# 需要创建几个

extra =1

# 与Grades关联上

classGradesAmin(admin.ModelAdmin):

# 与上面关联上inlines = [StudentsInfo]

自定义管理页面(布尔类型的显示问题)

classStudentsAdmin(admin.ModelAdmin):

defisdel(self):ifself.isdel ==False:return"删除"

# 设置页面列的名称

isdel.short_description ='是否删除'

自定义管理页面(执行动作的位置)

# 将动作位置放置底部

classStudentsAdmin(admin.ModelAdmin):

# 执行动作的位置

actions_on_bottom =Trueactions_on_top =False

十六、使用装饰器完成注册

# 自定义管理数据页面@admin.register(Students)classStudentsAdmin(admin.ModelAdmin):

十七、视图基本使用

概述

在Django中,视图对web请求进行回应;视图其实就是一个python函数,在views.py文件中定义;

备注: 有几个页面就有几个视图

定义视图

fromd  jango.http   import   HttpResponse

# 没有使用任何的模板

def  index(request):

return    HttpResponse('hello zyz!!!')

配置url (简单)

# 修改project/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')),# 会定位到myapp.urls中]

# 在对应应用中appname中,创建urls.py文件(与上面文件类似)

from  django.conf.urls  import url

from . import views

# 导入视图

 urlpatterns = [    url(r'^$', views.index)# 匹配到的就是views中的首页]

配置url (带参数)

# 描述(在views.py中定义的视图)

def   detail(request,num):

return   HttpResponse('detail-%s'% num)

# 在appname/urls.py中配置即可   

urlpatterns = [    url(r'^$', views.index),

# 添加括号,其实就是正则表达式中的组的概念。

# 而匹配到的就是可以给到

detail(request,num)函数中的

numurl(r'^(\d+)/$', views.detail)]

十八、模板的基本使用

概念

模板是HTML页面,可以根据视图中传递过来的数据进行填充

创建模板目录

在project中创建模板目录templates;

在templares目录中,创建对应应用目录appname作为项目模板目录;

创建对应应用app的目录,因为一个项目可以创建多个app,这也方便对应

配置模板路径

# 修改settings.py文件中的TEMPLATES;

TEMPLATES = [{'BACKEND':'django.template.backends.django.DjangoTemplates',

# 添加模板目录# 开头部分都有定义BASE_DIR,即项目其实目录'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

# 在网址中输入127.0.0.1/grades时,将所有班级显示出来# 在网址中输入127.0.0.1/students时,将所有学生显示出来- 先创建一个模板(project/templates/appname/)    grades.html    students.html- 模板代码(基本页面显示)- 创建对应视图

# 班级页defgrades(request):pass- url控制器(在myapp/urls.py中分发)    url(r'^grades/$', views.grades),- 视图中的具体操作

# 班级页

from.modelsimportGradesdefgrades(request):

# 通过模型取出数据库中对应表单数据

gradeList = Grades.objects.all()

# 将数据传递给模板(模板将数据渲染上之后再返回)

returnrender(request,'myapp/grades.html',{'grades': gradeList})

需求2

# 在班级信息中点击时,显示对应班级信息- 每个班级点击时,URL都会有变化 

  {{grade.gname}}- 匹配不同的视图  

url(r'^grades/(\d+)$', views.gradeStudents),

# 班级对应学生页- 视图中的具体操作

# 对应班级的学生信息

def gradeStudents(request,gradeid):

# 获取对应班级对象

grade = Grades.objects.get(pk=gradeid)

# 对应班级的学生studentList = grade.students_set.all()

# 都是学生信息都是一样显示(即模板是一致的)

# 就是数据源不一样

returnrender(request,'myapp/students.html',{'students':studentList})

链接:https://www.jianshu.com/p/d3b87efb555d

相关文章

  • 框架_Django_1

    Django 环境搭建 虚拟环境搭建(Ubuntu,windows类似) Django基本流程 Django的特点...

  • Django基本流程

    一、Django简介 Django是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网...

  • Django基本流程

    一、环境搭建 Python环境 虚拟机环境搭建 pycharm安装 mysql安装 二、Django简介 Djan...

  • django基本流程

    virtualenv newenv => 新的虚拟环境 source newenv/bin...

  • Django(基本流程)

    创建项目:1,在合适的目录创建一个目录2,打开黑屏终端进入到上一步创建的目录下3,输入(django-admin ...

  • Python的Django框架的运行方式及处理流程

    Django项目的运行方式和对Request的基本处理流程。 一、Django的运行方式 运行Django项目的方...

  • 三 Django基本流程

    1、创建django项目 打开pycharm-->选择new project,出现下面的对话框。 示例图image...

  • Django - 01-django基本流程

    [toc] 1 安装Django 1.1 Django版本与Python版本对应关系 1.2 安装Django 安...

  • 02-Django基本流程

    一、Django简介 Django是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网...

  • 02-Django基本流程

    一、Django简介 Django是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网...

网友评论

      本文标题:Django基本流程

      本文链接:https://www.haomeiwen.com/subject/dkxhmftx.html