django新手教程

Django简介

Django是开源的、大而且全的Web应用框架。

它独具特色,采用了MTV设计模式

它也是一款用来构建服务器的框架。这一概念如何理解呢?

应用程序有两种模式:C/S、B/S。

C/S是客户端与服务器端,这类程序一般能独立运行。

B/S是浏览器端和服务器端应用程序,这类应用程序一般要借助谷歌、火狐等浏览器来运行。

Web应用程序一般用B/S模式。

在网络编程的意义下,浏览器是一个socket客户端,服务器是一个socket服务端。而Django正是这样一种用来构建服务器的框架。

Django的设计模式介绍

Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。

Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。

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

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

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

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

django新手教程_第1张图片

Django框架的优点

强大的数据库功能

用 python 的类继承,几行代码就可以拥有一个丰富、动态的数据库操作接口(API),如果需要,你也能执行 SQL 语句ORM(Object-Relational Mapping“对象-关系-映射”),它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库。

自带强大的后台功能

在admin.py中写入几行简单实现功能代码就能实现管理员的权限。

优雅的网址

在urls.py中用正则匹配网址,传递到对应的函数,更加简单的编写路由。

具有模板系统

模板系统设计简单,易扩展。代码、样式分开设计,有助于查找和修改。

高效的缓存系统

Django和memcached、redis或者其他的缓存系统可联用,页面加载速度提升。

 

安装pip

pip是Python的包管理工具。使用它可方便下载各种Python的插件库。

如果电脑中没有pip可点击:pip · PyPI

下载最新的pip压缩包并进行解压,进入解压的目录。

在目录上方输入cmd然后回车进入命令行。

django新手教程_第2张图片

执行安装命令,在命令行输入:

python setup.py install

pip安装Django

安装

通过pip安装Django。

在cmd命令行中输入下面代码,然后回车进行下载安装。

pip install Django==2.2.6  -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

其中2.2.6为版本号,-i和后面是表示使用国内镜像进行下载。

验证安装成功

在cmd命令行中输入

pip list

然后回车,查看列表的版本为2.2.6的Django,则安装成功。

配置环境变量

我们需要将Django配置进环境变量,才可以使用django-admin命令(后续会使用到)

首先我们要找到Django的安装位置,可能的安装位置有如下两处:

C:\Users\Administrator\AppData\Roaming\Python\Python310\Scripts​(因每个人使用的Windows用户不一样,administrator也有可能是其他内容。python310为小编安装的python版本号,不同版本有所区别)

或者​C:\Program Files\Python310\Scripts​(python310同上)

在该文件夹下有一个django-admin.py  或 django-admin.exe 文件,有该文件的文件夹为django的安装位置,将这个安装位置(是一个文件夹路径)配置到环境变量中:

环境变量的配置方式:右键我的电脑->属性->高级系统设置->环境变量->系统变量->path变量

django新手教程_第3张图片

pip卸载Django

如需卸载当前版本的Django,那么需要在命令行输入命令:

pip uninstall django

如果要更换Django版本,需要先卸载当前版本,然后再下载新版本。

创建一个Django项目

创建一个名为project的Django项目,在cmd命令行输入

django-admin startproject project

输入命令完会生成一个名叫project的项目包,包内一个manage.py文件和项目名同名的project包。

  • manage.py文件: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。

project包里面我们可以查看到的目录结构:

django新手教程_第4张图片

  • project/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
  • project/settings.py: 该 Django 项目的设置/配置。
  • project/urls.py: 该 Django 项目的 URL 声明; 这是项目的根路由
  • project/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目

settings.py项目配置文件

创建完项目后,在项目同名的project目录内有一个settings.py 文件,这个配置文件用于配置和管理Django项目的运维信息。

settings.py配置文件中的所有配置项都是大写的,项目创建时,就初始化了一些默认配置,这些默认配置承载着最基础的项目信息。

其中常用的配置项有:

    DATABASES :数据库配置

    TEMPLATES:配置HTML页面的模板地址templates

    STATICFILES_DIRS :配置静态文件

    MIDDLEWARE :配置中间件

    DEBUG:默认为True,项目上线时改为False

    ALLOWED_HOSTS:限定请求中的host值

urls.py路由系统

Django的路由系统作用是使views中处理数据的函数与请求的url建立映射关系。

请求到来之后,根据urls.py里的关系条目,查找到与请求对应的处理方法,从而返回数据给客户端http页面。

django新手教程_第5张图片

在Django1.x版本中url映射一般是一条正则表达式,“^” 字符串的开始,“$“ 字符串的结束。项条目从头开始进行逐一对比,一旦遇到匹配项,立即执行该条目映射的视图函数或二级路由,其后的条目将不再继续匹配。因此,url路由的编写顺序至关重要!

在Django1.x中,一个url映射条目至少有两个参数,一个是正则规则,一个是视图函数,代码如下:

from django.conf.urls import url  # url()方法导入方式
url(r'^test/$',views.test)    # django2中使用re_path替换url

在Django2.x版本中路由映射使用 path() 或 re_path() 方法,path()没有了正则的那些规则,直接匹配字符串,re_patah() 用法和url()一样,path()的运用如下:

from django.urls import path,re_path    # path()方法的导入方式
path('test/',views.test)        # 不需要使用 ^ $ 等正则规则

注意:本课程中使用re_path()的正则匹配,可自行选择path()或re_path()。

当有多个应用(App)时,我们会在每个App里,各自创建一个urls.py路由模块,然后从根路由出发,将app所属的url请求,全部转发到相应的urls.py模块中。

用于开发的简易服务器

让我们来确认一下你的 Django 项目是否真的创建成功了。

下面将运行服务,访问这个项目。

如果你的当前目录不是外层的project目录的话,请切换到此目录,然后运行下面的命令:

python manage.py  runserver  8000

其中:

  • 8000为Django默认监听端口,可以省略。
  • 如果要使用其他端口可以将8000替换。
  • 在windows下Python可以简写为py。

django新手教程_第6张图片

这时,我们可以看见:‘https://127.0.0.1:8000/’,它表示服务器成功运行。

在浏览器访问‘https://127.0.0.1:8000/’,你将会看到如下页面。

django新手教程_第7张图片

127.0.0.1表示在本机访问,可以用localhost替代。

注意:不要关闭cmd窗口,否则服务器也将关闭。

创建一个应用

创建一个名为firstApp的应用,要先进入项目目录下,在cmd命令行输入

python manage.py startapp firstApp

project项目目录下如果出现一个名为firstApp包,则说明应用创建成功。

可以在项目所在路径命令行输入‘tree /F’查看目录层级,此时整个项目的目录层级为:

django新手教程_第8张图片

 

注册应用

新创建的应用要进行注册才可以用。

把我们新定义的firstApp加到项目同名目录下的settings.py中的INSTALL_APPS中。把应用的名称写入 ,记得用引号包裹,逗号隔开。

django新手教程_第9张图片

 

什么是视图?

MTV中的V表示的是View,视图函数(或简称视图)只是一个Python函数,它接受Web请求并返回Web响应。

此响应可以是网页的HTML内容,重定向,404错误,XML文档或图像。视图本身包含返回该响应所需的任何任意逻辑。

该代码可以存在于你想要的任何地方,只要它在Python路径上即可。

为了将代码放在某处,惯例是将视图放在一个名为views.py的文件中,该文件位于项目或应用程序目录中。

编写第一个视图

打开 firstApp/view.py,把下面这些 Python 代码输入进去:

from django.http import HttpResponse    
def index(request):    
    return HttpResponse("Hello, world !")

其中,request参数是用来接收请求报文的,导入HttpResponse对象,用来向客户端返回数据。

如果想看见效果,我们需要将一个 URL 映射到它——这就是我们需要 URLconf 的原因了。

为了创建 URLconf,请在firstApp目录里新建一个 urls.py 文件。

路由的使用

firstApp/urls.py(没有这个文件就在应用目录下创建urls.py文件,这是子路由)中,输入如下代码:

#子路由
from django.urls import path,re_path
from firstApp import views

urlpatterns = [
    re_path('', views.index, name='index'),    # re_path可以使用正则匹配视图,相当于Django1版本的url
    #...  其他的路由规则
]

下一步是要在根 URLconf 文件中指定我们创建的firstApp模块。在project/urls.py (根路由)文件的 urlpatterns列表里插入一个 include(),添加分路由,把我们自己创建的urls.py与根路由关联,代码如下:

#根路由
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),    # path匹配的是字符串
    path('', include(('firstApp.urls','app'),namespace='app')),    # namespace是命名空间
    #...  其他的路由规则
]

函数 include( )允许引用其它 URLconfs。每当Django遇到include()(来自django.conf.urls.include())时,它会去掉URL中匹配的部分并将剩下的字符串发送给include的URLconf做进一步处理,也就是转发到二级路由去。

此时用你的浏览器访问 http://localhost:8000,你将能够看见 "Hello, world!" ,这是你在index视图中定义的。

django新手教程_第10张图片

 

Django1.x 与Django2.x中url与path的区别

Django2.x版本

Django2.x中的路由匹配视图官方推荐用path,path不支持正则匹配,直接匹配相同字符串。与url相比要去掉r、^和$等正则匹配。

#在使用namespace时需要在include中加入app_name,也就是下面的firstApp

#根路由
from django.contrib import admin
from django.urls import path,include,re_path    # path的导入方式

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include(('firstApp.urls','firstApp'),namespace='firstApp')),

Django1.x 版本

Django1.x 中路由匹配视图使用url,使用正则匹配。在Django2.x中可使用re_path替换url,其他不变。

#在使用namespace时不需要加入app_name

#根路由
from django.conf.urls import url,include    # url导入方式
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^',include(('firstApp.urls'),namespace="firstApp")),
]

在本教程中路由统一采用re_path正则匹配的方式。

什么是模型?

模型(Model)是MTV中的M。模型一般在应用目录下的models.py进行操作。

模型是数据唯一而且准确的信息来源。它包含你正在储存的数据的重要字段和行为。一般来说,每一个模型都映射一个数据库表。

记住:

  • 每个模型都是一个 Python 的类,这些类继承 django.db.models.Model
  • 模型类的每个属性都相当于一个数据库的字段。

综上所述,Django 将给你一个自动生成访问数据库的 API。

web项目的数据一般都存在数据库(database)中,模型与数据库的交互是通过ORM完成。

 

ORM

ORM是“对象-关系-映射”的简称。

它是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。

django新手教程_第11张图片

ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。这使软件开发人员专注于业务逻辑的处理,提高了开发效率。

django新手教程_第12张图片

 

创建模型

现在我们定义一个名为Person的样例模型,并且有first_name和last_name属性。

在应用目录下firstApp/models.py中输入:

from django.db import models
class Person(models.Model):
    first_name=models.CharField(max_length=30)
    last_name=models.CharField(max_length=30)
    class Meta:
        db_table="person"

其中类名首字母应当大写。模型继承django.db.models.Model。

first_name 和  last_name是模型的字段。

每个字段都被指定为一个类属性,并且每个属性映射为一个数据库列。

CharField表示定义的字段类型为字符串。

max_length表示字段的最大长度。

db_table='person’是定义模型类在数据库中生成的表单的名字。

以上的 Person 模型能创建一个数据库表,如下:

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

数据库的配置

通常,这个配置文件使用 SQLite 作为默认数据库。如果你不熟悉数据库,或者只是想尝试下 Django,这是最简单的选择。

Python 内置 SQLite,所以你无需安装额外东西来使用它。

本课程使用的是MySQL数据库,如果使用默认数据库无需进行下面更改。

用pip安装mysqlclient,mysqlclient是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。

pip install mysqlclient

注意:在Django2中使用pymysql可以会版本报错,所以最好使用mysqlclient。

安装完,打开 project/setttings.py这是个包含了 Django 项目设置的 Python 模块。找到DATABASES对其进行配置。

django新手教程_第13张图片

其中MySQL的默认端口号为3306,如果是本机的数据库,HOST填入:127.0.0.1。

如此操作,数据库的基本配置就完成了。

数据迁移

 创建完模型后,我们需要找到项目目录(manage.py所在的目录),生成一个迁移文件,在命令行输入:

python manage.py makemigrations

生成迁移文件之后,执行迁移文件,请使用下面的指令:

python manage.py migrate

执行完迁移,数据库中会根据模型中类和属性生成对应的表。

 

模型属性(objects)

objects是类的一个属性。

objects是Manager类型的对象,用于与数据库进行交互,称之为管理器对象。

当定义的模型没有指定管理器对象,系统会默认创建一个名为objects的属性作为管理器对象。

objects也可自定义:

首先,自定义一个继承models.Manager的管理类,代码中重写get_queryset方法对数据进行了过滤。代码如下:

class StudentManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(isDelete=False)

然后,自定义管理器对象:

books=StudentManager()

一旦自定义管理器对象,默认的objects就不再自动生成。可以用自定义的管理器对象替它。

objects一般是通过‘类名.objects ’的方法使用

创建对象

创建对象就是根据模型中定义的类创建一个实例对象,这个对象拥有实际的属性值。

当创建对象时,Django不会与数据库进行交互,调用save()方法时才与数据库进行交互,将对象保存到数据库中。

创建对象的方法有多种,最简单的方法是在类中自定义一个类方法创建对象。定义一个create类方法具体代码如下:

class Student(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    @classmethod    #类方法
    def create(cls, name, age):
        return cls(name=name,age=age)
    class Meta:
        db_table="student"

类方法的定义要在函数的上方添加@classmethod,类方法把类当做第一个参数传给cls,后面的参数就是类的属性的形参,最后返回的把参数赋值给类属性。

创建对象一般在视图函数中,利用类方法创建一个名为小明,年龄为10的实例对象,代码如下:

name="小明"
age="10"
s3 = Student.create(name,age)
s3.save()

执行save()才能保存到数据库。

django新手教程_第14张图片

django新手教程_第15张图片django新手教程_第16张图片 

 django新手教程_第17张图片

 

 

你可能感兴趣的:(django,python,后端)