美文网首页
1-Django基本流程走通

1-Django基本流程走通

作者: 维克多老仙 | 来源:发表于2018-08-16 22:05 被阅读0次

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图解

1443681047-5b37ac59789db_articlex.png

Django的MTV

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

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

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

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

MTV图解

3317306295-5b37ac6eec3ed_articlex.png

创建工程

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

[图片上传失败...(image-e0e67a-1534428254655)]

数据库配置

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),

相关文章

  • 1-Django基本流程走通

    Django简介 Django是一个开放源代码的Web应用框架,由python写成,初次发布于2005年7月,并于...

  • 1.Scrapy基本流程走通

    Scrapy基本流程走通 文章仅供学习,如有错误,欢迎指出 创建我们的第一个spider 不同种类的spider ...

  • Docker+Jenkins+Pipeline实现持续集成(三)

    基本流程走通后,我们还可以为项目增加webhook、文件存档、邮件发送、声音提示等配置 插件推荐 添加gitlab...

  • 基于 kubebuilder 的 operators 开发问题总

    前情提要 之前的文章已经将 kubebuilder 的开发环境和本地调试环境进行了简介和部署实现,流程基本走通,同...

  • 如何使用Data Binding Library(二)

    1.前言 通过上一讲的介绍,可以走通Data Binding基本的流程,了解实现的逻辑。但是仅仅掌握这些是不够的,...

  • mysql相关的面试题 持续更新

    在生产环境中,开发人员开用户流程 平常企业 先确认开发人员的流程是否走通 如走通,确认开发人员做哪些操作 确认从哪...

  • 2014.09.12

    今天工作重点: 1.先把整体的检索流程走通,做一些例子走通,对大体思路考虑清楚。对于一些细节问题,先假设已经可以解...

  • 终于可以走通流程了!

    从两周前可以下单开始,一直在做最后上线前准备。 今天在火车站,正好测试下单,看下取票后的逻辑,这是第一张真正通过网...

  • 1.Django走通流程

    安装 进入终端输入 pip install Django==2.0 等待安装完成,验证是否安装成功,在终端输入 i...

  • Ionic3 拍照上传

    本文主要介绍使用cordova实现拍照上传,走通 “拍照 》预览 》上传 》 下载 ”这个流程。为了方便查看测试结...

网友评论

      本文标题:1-Django基本流程走通

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