Django:基础

认识Django

1、Django是基于Python语言开发的一套重量级框架

2、Django是一款基于BSD协议并完全免费开源的开发框架

安装Django

Django框架是以类似于python第三方包存在的,因此可以使用PIP安装

pip install Django==2.0

注:
1、在安装时也可以不指名安装的版本,就会默认安装最新版本

2、Django推荐使用Python 3进行开发。最后一个支持Python2.7的版本是Django1.11LTS

 

创建Django工程

方法1:

1、在安装Django包后,就可以创建Django工程了:
    步骤一:首先在任意盘、任意路径下创建一个名为"demo"的文件夹
    步骤二:打开命令提示符,输入"cd demo文件夹的路径",将命令行切换到demo文件夹下(也可以直接在demo文件下直接Shift+鼠标右键:在当前文件夹下打开shell窗口,就不用cd切换路径了)
    步骤三:在命令提示符中输入"django-admin startproject mysite"(mysite表示项目名字,可任意)

注:
应避免使用python内置的包或django内嵌组件名来命名项目:如不能使用django来命名,也不能使用test来命名

不要将django项目代码文件与其他网站项目放在一起:如不能将django文件放置在Web服务器跟目录,这样可能会将django的代码暴露在浏览器中

 

2、项目文件目录介绍

在成功创建Django项目后,就可以看到项目工程文件夹下多了一个文件夹和几个PY文件
    ⑴最外层文件夹"myWeb"是整个项目的容器:它的名字对于Django来说没有任何意义,虽然创建项目时使用了"myWeb"作为项目的名字,但是可以随时修改它的名字
    ⑵根目录的manage.py:该py文件是一个命令行工具,通过这个py文件可以管理Django项目
    ⑶第二级的"myWeb"文件夹:该文件夹才是当前Django工程所使用的Python包(包含__init__.py文件的python文件夹)。这个文件夹的名字将会被用来导入包内的所有内容(如导入myWeb.urls)
    ⑷myWeb/__init__.py:表明当前文件夹是一个Python包
    ⑸myWeb/settings.py:当前Django工程的配置文件
    ⑹myWeb/urls.py:当前Django工程的路由配置文件,包含工程的路由信息
    ⑺myWeb/wsgi.py:兼容WSGI的Web服务入口。Django应用程序是基于WSGI服务开发的,因此运行或部署Django程序时需要指定WSGI配置信息
    ⑻另,在有些版本的pycharm在创建Django工程时会自动生成一个templates目录:该目录是HTML文件存放处(这是Pycharm安利给我们的),也就是MTV中的T

注:上面这种创建方式中,我们还没有创建APP,后面会介绍如何创建一个或多个APP

方法2:

直接在编辑器(Pycharm)中创建:跟在pycharm中创建一般的Python工程差不多,只是需要单独选择一些东西

1、创建项目时选择:Django

2、项目环境选择:使用默认环境(不使用虚拟环境:当然也可以选择使用虚拟环境env,只是选择了虚拟环境在创建Django项目时还要重新装一遍各种包,太浪费时间了)

3、创建APP:在Application中填写需要创建APP名字(这里填写后再创建工程时就会一起创建APP,后面就不需要单独再创建APP了,当然也还可以单独增加APP,毕竟一个工程下可以有多个APP)

注:从上面的创建结果可以看出

1、使用命令创建的Django工程和使用Pycharm创建的工程在初始上还是有很大的不同:
    ⑴使用命令创建的工程不会创建APP,需要单独创建
    ⑵使用命令创建的工程目录中也不会有templates文件夹,也是需要后面单独创建
2、所以说还是推荐使用编辑器来创建Django工程

运行Django工程

1、在搭建好Django工程后,就可以运行工程来检查下工程是否能够正常运行:
    ⑴将命令提示符所在位置切换到最外层的myWeb文件夹,执行命令:python manage.py runserver
    ⑵如果是使用Pycharm创建的工程,其也可以直接选择工程名,点击绿色的三角形来运行工程


2、运行结果

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
November 16, 2019 - 13:08:15
Django version 2.2.7, using settings 'myWeb.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

注:
1、上面的运行结果中有个警告信息"You have 17 unapplied migration(s).",这是因为新搭建的Django工程还没有使用数据库

2、Django应用运行起来后,打开浏览器,并在地址栏中输入"http://127.0.0.1:8000/",如果能看到Django的欢迎页面,就说明Django已经创建成功了

3、此时我们就使用了一个Python内置的轻量级Web服务器运行了Django工程。当然以这种方式运行Django应用程序的稳定性和网站性能都很差,只适用于开发过程

第一个Django请求

现实生活中我们可以看到一个网站是有很多URL组成的(URL的目录层级和参数等)。现在我们修改下默认URL的目录,如修改为:127.0.0.1:8000/login(后面增加了个login),增加之后再访问,会发现页面是不存在的(404)。为什么会这样呢?
因为我们工程中都没有对127.0.0.1:8000/login这个URL地址进行配置,就肯定不会正常访问了。因此现在可以看下Django工程中urls.py文件

由上面的图,可以看到URL地址是在urlpatterns这个列表中进行配置的:默认存在一个urlpatterns = [path('admin/', admin.site.urls),]
    ⑴URL配置中的"admin/"表示:URL的地址(目录)
    ⑵URL配置中的"admin.site.urls"表示:浏览器访问这个地址时,调用的函数(服务器该怎么去处理,应该返回什么,怎么返回等)

配置URL

现在弄清楚了URL的配置(目前只是简单的介绍下),因此我们就可以自己去进行URL的配置了

步骤1:在urlpatterns列表中增加我们需要的URL:urlpatterns = [path('admin/', admin.site.urls),path('login', login),](最后一个URL后面也要有逗号)。这里表示URL地址为:127.0.0.1:8000/login,对应的处理函数为login

步骤2:在步骤1中我们定义了一个URL和对应的处理函数login,那现在就需要去编写这个login的处理函数了

注:
1、定义了一个login()函数,该函数只是返回一个字符串:"这里是登录页面"

2、HttpResponse()函数表示:Django框架中返回字符串的方法(用户能看到的),该方法在django.shortcuts模块下

3、函数的本质是接收用户请求、处理请求、返回结果,因此:
    ⑴login()函数的参数request表示:用户请求相关的所有信息,是一个对象(在Django中定义一个函数至少有一个参数request)

4、对URL和处理函数定义后,127.0.0.1:8000/login这个地址就能正常返回了

注意:

1、上面例子中是在根目录下的urls.py(Web\urls.py)中创建的一个函数(页面),但urls.py的作用是路由:根目录下的URL.py相对于是整个Django的,可以将多个APP的路由都配置到这里面(单个APP下的urls.py只是针对于对应的APP的)

2、如果像上面例子那样:在urls.py中定义处理函数,就会使urls.py文件看起来很复杂,特别是web页面、函数等多起来后就会更复杂。因此在实际中会创建新的文件夹来存放我们的处理函数、HTML文件、CSS、JS等文件(就是创建应用程序,后面会介绍,后面例子是在这个例子之外的,即删除了这个例子后重新创建的)

创建应用程序


前面在创建Django工程时说过:使用命令的方式创建的Django工程不会自动创建APP应用程序(使用编辑器创建的也可以增加APP应用程序)


工程Project与应用程序APP的关系

1、应用程序是真正工作的组件,例如一个博客系统或者一个投票系统,工程是包含网站配置信息和应用程序的集合,一个工程可以包含多个应用程序,而一个应用程序也可以属于多个工程

2、前面"第一个请求"的例子中也说过,一个网站等是由很多系统、模块组成的。如果都将全部功能放到Django的主模块中,但当项目变得巨大的时候,就会显得太过杂乱,缺乏逻辑性和层次性。因此Django中App的作用就在于此,我们可以将不同类型的功能分成多个不同的App应用来开发

3、在Django中的一个app代表一个功能模块。开发者可以将不同功能的模块放在不同的app中, 方便代码的复用。app就是项目的基石

4、app是Django项目的组成部分。一个APP代表项目中的一个模块,所有URL请求的响应都是由APP来处理。比如豆瓣网,里面有图书、电影、音乐等许许多多的模块,如果站在Django的角度来看,图书、电影这些模块就是app,图书、电影这些app共同组成了豆瓣这个项目。因此Django项目由许多app组成,一个app可以被用到其他项目中,Django也能拥有不同的APP


创建APP应用程序

1、打开命令行,进入项目所在的目录:应用程序可以放在任何python路径能够识别的地方,这里为了方便调用,就放在了manage.py同级目录下

2、使用命令:python manage.py startapp 应用程序名(这里使用的是Pycharm自带的命令行工具,Cmd工具也可以)

注:从上面的创建结果可以看出

1、上面例子中一共有两个APP应用程序:
    ⑴Login是创建工程时创建的APP,可以负责登录模块
    ⑵polls是后面单独增加的APP,中文意思为"投票",可以负责投票、民意调查等模块

2、在创建工程时一起创建的APP与后面单独增加的APP是一样的

注册APP(settings)

1、上面步骤中我们增加了一个名为"polls"的APP。接下来我们需要修改项目配置文件,以便“告诉”Django现在有一个名为"polls"的APP了(APP名字不进行设置的话,可能不会正常的访问URL)

2、打开根目录的settings.py,找到INSTALLED_APPS写入如下代码:在原有的APP后面加上我们新增的APP的名字(注意后面有逗号)

3、下面第二张图中,在配置APP名字后,还需要加一个逗号,图中是错误的

settings.py/

INSTALLED_APPS = [
    # 其他代码
    ...
    # 新增app名,激活app
    'polls',
]

第一个视图

1、Django的视图是负责页面展示的重要模块,用于处理网站业务逻辑。视图都是放在对应的view.py文件中的

2、视图就是Django项目下的view.py文件(对于应用程序来说就是各个APP下的view.py文件),它的内部是一系列的函数或者类,用来专门处理客户端访问请:后处理请求并返回相应的数据,相当于一个中央情报处理系统


步骤1:

1、在对应的应用程序下的view.py文件中编写逻辑处理函数

2、这里以Login应用程序为例,即在Login\view.py文件中添加处理代码

from django.http import HttpResponse


def Login(request):
    return HttpResponse("欢迎来到登录页面")

注:
1、上面例子这样就创建了一个最简单的Django视图。为了能够访问它,需要在URL中添加路由映射。

2、因为现在我们是在应用程序中添加的视图,为了方便管理各个APP下的url,因此我们采用的是分布式路由的方法:也就是各个应用程序先单独管理自己的url,然后再在项目下的url中集中管理各个应用程序下的url


添加路由映射:应用程序

1、在Login应用程序文件夹下新建urls.py文件:用于管理Login应用程序中的url路由,并在该文件夹中添加对应的映射关系代码

2、视图函数需要和对应的 URL 绑定,这样当用户访问某个 URL 时,Django 才知道调用哪个视图函数处理用户请求

from django.urls import path
from . import views          #导入对应的视图函数名字,以后视图函数会越来越多
#等同于from Login import views


urlpatterns = [
    path('', views.Login,name="登录"),
]

"""
上面表示创建了一个目录为空字符串的url,因为我们的预期url是http://127.0.0.1:8000/login/,
并且会在根url文件里面配置具体的url目录名,所以在这里就不配置了
如果这里也配置了login/,根目录也配置了login/,那最后的url就变成了http://127.0.0.1:8000/login//login/
"""


添加路由映射:主目录中

上面步骤中在应用程序下面的urls.py文件中添加了映射,那接下来就应该在主项目下的urls.py中增加对应的路由映射了

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path("login/",include("Login.urls")),#新增登录路由
]

注:
1、Path()方法可以接受4个参数,其中两个必选参数:route和view,另外两个是可选参数kwargs和name
    ⑴route参数:正则表达式,一个正则表达式字符串
    ⑵view参数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
    ⑶kwargs参数:可选的要传递给视图函数的默认参数(字典形式)
    ⑷name参数:别名,一个可选的name参数
    ⑸应用程序中的路由:用空字符串表示route参数
    ⑹主路由格式:用具体的url目录名字表示route参数

2、include()方法可以用来引用其他URLconfs(各个应用程序下的urls.py)。通过合理的使用include()方法可以将整个网站中的所有URL分配到多个文件中,使得代码更加简洁

3、除了admin.site.urls之外,在任何时候都应该使用include()方法引起其他子路由模块

4、现在在根目录下的urls.py文件中配置了我们自己的url,如现在再去访问http://127.0.0.1:8000/,就会发现返回的404了(一开始返回的是Django的欢迎页面)。这是因为现在我们改动过了urlpatterns配置,且改动后没有设置这个url的映射,所以会报错

应用的分布式路由

1、url请求---->访问路由系统(负责分发请求到相应视图函数)------>视图函数(处理请求)------>DataBase(数据库操作数据生成对应页面返回给用户)

2、在Django中,主文件夹下的urls.py可以不处理用户具体请求的,主文件夹的作用是做项目的初始化以及请求的分发(分布式请求处理)。具体的请求可以由应用来进行处理的


具体流程原理如下:
1、用manage .py runserver启动Django服务器时就载入了在同一目录下的settings.py。该文件包含了项目中的配置信息,其中最重要的配置就是ROOT_URLCONF,它告诉Django哪个Python模块应该用作本站的URLConf,默认的是urls.py

2、当访问url的时候,Django会根据ROOT_URLCONF的设置来装载URLConf

3、按顺序逐个匹配URLConf里的URLpatterns。如果找到则会调用相关联的视图函数,并把HttpRequest对象作为第一个参数(通常用request);

4、最后该view函数负责返回一个Web响应

设置服务器IP

上面所有例子中使用的IP地址都是Django自动设置的:127.0.0.1:8000。这个IP的意思是只能在本机上访问Django服务,在同一局域网下的其他电脑是不能访问的。所以如果还想在局域网下访问其他电脑上的Django服务的话,需要单独设置配置文件和设置IP地址

1、修改工程目录下的setting.py 文件

1、ALLOWED_HOSTS = ['*']  #*表示允许访问的ip    如果是添加*  则允许所有同局域网环境的主机访问
2、ALLOWED_HOSTS = ['192.168.3.xx']#也可以是本机的固定ip(Django所在电脑IP)
注:
有些教程上说:ALLOWED_HOSTS = ['*',],注意不要漏掉“,”。不过我自己试的可有可无都行

2.1、通过CMD命令启动Django项目

进入 manage.py 所在目录在cmd中执行:python manage.py runserver 0.0.0.0:8000

2.2、通过Pycharm启动Django项目

进入到Django IP设置页面,设置启动的HOST为:0.0.0.0

3、通过步骤2中的两种方法中的任意一种启动服务后,就可以通过访问Django所在机器的IP来访问Django服务

如:http://192.168.1.xx:8000/

拓展:

web框架介绍

Web框架: 别人已经设定好的一个Web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子
一般Web框架的架构是这样的:

 

MVC/MTV介绍


MVC

百度百科:全名Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件工程典范,用业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

通俗解释:一种代码和文件的组织和管理形式!不要被缩写吓到了,这其实就是把代码分散到不同的文件中,把不同类型的文件又放到不同目录下的一种做法,然后取了个高大上的名字。当然,它带来的好处有很多,比如前后端分离,松耦合等等,在使用中你慢慢体会就会逐渐明白它。

其中: 

模型(model):定义数据库相关的内容,一般放在models.py文件中。

视图(view):定义HTML等静态网页文件相关,也就是那些HTML、CSS、JS等前端的东西。

控制器(controller):定义业务逻辑相关,就是你的主要代码 

MTV

Django觉得MVC的字面意思很别扭,不太符合它的理念,就给它改了一下
    ⑴view不再是HTML相关,而是主业务逻辑V了,相当于控制器
    ⑵HTML被放在Templates中,称作模板T
    ⑶于是MVC就变成了MTV。这其实就是一个文字游戏,和MVC本质上是一样的,换了个名字和叫法而已,换汤不换药。

 

 Django的MTV模型组织

目录分开,就必须有机制将他们在内里进行耦合。在Django中,典型的业务流程如下图所示:

发布了9 篇原创文章 · 获赞 0 · 访问量 233

猜你喜欢

转载自blog.csdn.net/zh18380113164/article/details/103109936
今日推荐