博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1-Django基本流程走通
阅读量:6174 次
发布时间:2019-06-21

本文共 6075 字,大约阅读时间需要 20 分钟。

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

Django的MTV

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

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

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

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

MTV图解

clipboard.png

创建工程

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

clipboard.png

数据库配置

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.pyINSTALLED_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.nameclass 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 renderfrom django.http import HttpResponsefrom myApp.models import Grade, Studentdef 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都是  标签中         name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:filename:      上传文件名,用字符串表示content_type:   上传文件的ContentTypecontent:       上传文件的原始内容

配置路由

主路由:与工程名相同名字的目录下的urls.py文件

配置文件:ROOT_URLCONF = 'project.urls'

urls.py

from django.conf.urls import url, includefrom django.contrib import adminurlpatterns = [    url(r'^admin/', admin.site.urls),    # 包含子路由    url(r'^', include('myApp.urls')),]

子路由:在应用目录下创建名为urls.py的文件

作用:路由分发,规定哪个网址由哪个视图处理

urls.py

from django.conf.urls import urlfrom myApp import viewsurlpatterns = [    # 路由匹配    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

    
班级信息

班级信息

    {% for grade in grades %}
  • {
    { grade.name }}
  • {% endfor %}

student.html

    
学生信息

学生信息

    {% for stu in stusList %}
  • {
    { stu.name }}--{
    { stu.grade }}--{
    { stu.age }}
  • {% endfor %}

在视图中返回模板

views.py

from myApp.models import Grade, Studentdef 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),

转载地址:http://aaqba.baihongyu.com/

你可能感兴趣的文章
安装系统前的准备---vmware
查看>>
Tiny并行计算框架之使用介绍
查看>>
Linux od命令
查看>>
一个不错的MySQL集群管理工具
查看>>
mysql-proxy 按表分发查询的lua脚本
查看>>
在wordpress主题下面添加二级菜单
查看>>
结合MongoDB开发LBS应用
查看>>
CentOS 下JDK安装
查看>>
从点名信想到母亲的一件事
查看>>
Nginx + Django
查看>>
我的友情链接
查看>>
cnetos7更改网卡类型
查看>>
用shell脚本编写进度条
查看>>
使用Live555类库实现的网络直播系统
查看>>
MySQL的使用
查看>>
分我一半的眼泪代码
查看>>
国内Saas2.0还有多远要走
查看>>
同步synchronized方法和代码块
查看>>
IO与NIO
查看>>
go_wed编程笔记
查看>>