1-Django基本流程走通

重峦叠嶂
• 阅读 1793

1-Django基本流程走通

Django简介

Django是一个开放源代码的Web应用框架,由python写成,初次发布于2005年7月,并于2008年9月发布了第一个正式版本1.0

MVC:MVC是一种软件设计典范,核心思想是解耦

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

Django与python版本对应关系

Django Version Pyhton Version
1.8 2.7 ,3.2(until the end of 2016) ,3.3 ,3.4 ,3.5,
1.9 1.10 2.7 ,3.4 ,3.5,
1.11 2.7 ,3.4 ,3.5, 3.6
2.0 3.4 ,3.5, 3.6
2.1 3.5, 3.6,3.7

MVC

Model(模型):是应用程序中用于处理程序逻辑的部分,负责数据库中存储数据

View(视图):是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的

Controller(控制器):是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据

MVC图解

1-Django基本流程走通

Django的MTV

本质与MVC模式没有区别,只是定义形式不同

Model(模型):负责业务对象与数据库的对象(ORM)

Template(模板):负责如何把页面展示给用户

View(视图):负责业务逻辑,并在适当的时候调用Model和Template

MTV图解

1-Django基本流程走通

创建工程

# 黑屏终端,进入指定目录 创建工程
django-admin  startproject  project

1-Django基本流程走通

数据库配置

setting.py中配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',        #数据库名字
        'USER': 'root',          #账号
        'PASSWORD': '123456',    #密码
        'HOST': '127.0.0.1',     #IP
        'PORT': '3306',          #端口
    }
}

__init__.py文件中写入以下两行代码:

  import pymsql
  pymsql.install_as_Mysqldb()

或者安装pip install mysqlclient或者pip install mysql-python

安装出错可以到http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python下载对应版本安装。

创建应用

在一个工程中可以创建一个到多个应用,每个应用处理一种业务逻辑

打开黑屏终端进入工程目录下 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 [app名字]
作用: 在应用目录下的migrations目录下成迁移文件

执行迁移: python manage.py migrate [app名字]
作用:相当于执行sql语句生成数据表,表名为 应用名全小写_类名全小写

查看建表语句: python manage.py sqlmigrate app名字 0001 
说明:0001为makemigrations之后产生了0001_initial.py文件

模型操作数据库

# 进入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)
HttpRequest对象的属性
path:       请求页面的全路径,不包括域名
method:     请求中使用的HTTP方法的字符串表示。全大写表示。例如
if request.method == "GET":
   do_something()
elif request.method == "POST":
   do_something_else()
      
GET:  包含所有HTTP  GET参数的类字典对象
POST:包含所有HTTP  POST参数的类字典对象

user:是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前没有登陆,user将被初始化为         django.contrib.auth.models.AnonymousUser的实例(匿名用户)。你可以通过user的is_authenticated()方法来辨别      用户是否登陆:
        if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware时该属性才可用

session:唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。
COOKIES: 包含所有cookies的标准Python字典对象;keys和values都是字符串。
FILES:  包含所有上传文件的类字典对象;FILES中的每一个Key都是 <input type = "file"name = ""/> 标签中
         name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:

filename:      上传文件名,用字符串表示
content_type:   上传文件的ContentType
content:       上传文件的原始内容

配置路由

主路由:与工程名相同名字的目录下的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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>班级信息</title>
</head>
<body>
    <h1>班级信息</h1>
    <ul>
        {% for grade in grades %}
            <li>{{ grade.name }}</li>
        {% endfor %}
    </ul>
</body>
</html>

student.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>
    <h1>学生信息</h1>
    <ul>
        {% for stu in stusList %}
        <li>{{ stu.name }}--{{ stu.grade }}--{{ stu.age }}</li>
        {% endfor %}
    </ul>
</body>
</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),
点赞
收藏
评论区
推荐文章
KlausMecial KlausMecial
4年前
Django的安装与简易使用
Django的安装与简易使用1.Django的简介Django是有Python编写的一个开源代码Web应用框架(网址:https://github.com/django/django)。他是基于MTV模式,其本质与MVC是一样的。具体是:1.M代表模型(Model):负责业务对象和数据库的关系映射(ORM)2.T代表模板(Template):负责
Wesley13 Wesley13
3年前
Spring MVC入门
2.1、SpringWebMVC是什么SpringWebMVC是一种基于Java的实现了WebMVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求响应模型,框架的目的就是帮助我们简化开发,SpringWebMVC也是要简化我们日常Web开发的。另外还有一种基于
Stella981 Stella981
3年前
Django简介及Django项目的创建详述
Django简介Django是一个开源的Web应用框架,由Python写成。但是,百度百科中讲它采用了MVC框架模式,其实这个解释不准确。确切的讲,Django的模式是:路由控制MTV模式。所谓的路由控制其实就是采用URL分发器,将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template。
Stella981 Stella981
3年前
Flask最强攻略
首先,要看你学没学过Django如果学过Django的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分一.Python现阶段三大主流Web框架DjangoTornadoFlask对比1.Django主要特点是大而全,集成了很多组件,例如:ModelsAdminForm
Stella981 Stella981
3年前
Django(四)路由系统
Django的路由系统URL配置(URLconf)就像Django所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。URLconf配置基本格式fromdjang
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Django框架介绍
 Django框架简介MVC框架和MTV框架(了解即可)MVC,全名是ModelViewController,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。
Stella981 Stella981
3年前
Noark入门之异步事件
引入异步事件主要是为了各模块的解耦,每当完成一个动作时,向系统发布一个事件,由关心的模块自己监听处理,可选择同步处理,异步处理,延迟处理。何时发布事件,当其他模块关心此动作时<br比如获得道具时,任务系统模块要判定完成进度,BI模块需要上报等等都可以监听此事件,已达模块解耦0x00事件源一个实现xyz.noark.core.event
Stella981 Stella981
3年前
Django简介以及MVC模式
一.简介Django,是当前Python世界里最负盛名且成熟的网络框架。最初用来制作在线新闻的Web站点。Django是一个基于python的web重量级框架重指的是为发开者考虑的多采用了MVC的框架模式,也有很多人把它称为MVT(MTV)模式。二.MVC模式一种软件设计典范,用一种业务逻辑,使数据,界面显示分离的方法组织代码,将业务
陈占占 陈占占
3年前
Django 配置搜索引擎 haystack 与 搜索页面无法返回数据问题
Django配置搜索引擎haystack与搜索页面无法返回数据问题1、Django安装haystackwhooshjiebahaystack是django的开源搜索框架,该框架支持Solr,Elasticsearch,Whoosh,搜索引擎量。Whoosh是一个搜索引擎使用,这是一个由纯Python实现的全文搜索引擎,没有二进制文