Django入门教程

前言

第一章: django快速入门

第二章: django MTV架构

第三章: django视图

第四章: django模板

第五章: django模型

第六章: django后台管理系统

第七章: 项目实战-简易的博客系统

第八章:django表单

第九章:django用户认证系统

第十章:django中的会话

第十一章:django安全

第十二章:django性能优化

第十三章:django实用工具

首页 > Django入门教程 > 第一章: django快速入门 > 1.5节: 你好django

1.5节: 你好django

薯条老师 2020-06-18 16:51:20 232056 4

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

1.5.1 http url

在1.4节的内容中,我们启动了django应用blog,在浏览器中打开的首页是django的欢迎页。在本节的内容中,通过学习url以及django视图、模板的知识,我们可以自定义web站点的页面。URL是统一资源定位符,在HTTP协议中使用URL来进行资源的定位。HTTP URL的形式如下:http://<host>:<port>/<path>?<query>

(1) host表示主机的域名或IP地址,通过DNS系统,可以将域名解析为IP地址。

(2) port表示tcp连接的端口号,http协议是基于TCP协议来进行数据的可靠传输。端口号省略时,使用的是http协议的默认端口号:80。

(3) path是资源在目标主机上的路径,以"/"进行路径的连接。 

(4) query是查询字符串。<path>,<query>和它前面的"?"都是可选的。如果<path>和<query>部分都没有,则"/"也可以省略。

query的基本格式:

name1=value1&name2=value2#anchor 

query中的name=value,表示请求中携带的参数,name表示参数名,value为参数值, &用来对参数进行分隔。#符号后面的表示锚点,用来对页面中的特定位置进行定位。

URL实例

http://chipscoco.com/index.html?key=python#coco

在上文的url实例中,host为www.chipscoco.com, port为http协议默认的端口80,path是/index.html, 参数名为key, 参数值为python, 锚点为coco, 打开这个页面时,会定位到页面中的锚点coco处。

1.5.2 django视图

视图对应于django应用下的views.py文件,它的内部是一系列的函数或者类,用来处理客户端的访问请求。django应用服务器基于http协议,这里的访问请求指的是http请求。http协议常见的请求方法见下表:

http请求方法
描述
GET

幂等请求,表示获取服务器上的资源,使用get请求时,请求参数会在URL中进行体现。

POST

非幂等请求,表示向服务器提交资源,以让服务器进行处理,请求参数不会出现在URL中,而是出现在请求体中。从语义上来说,post请求是作为一种写操作,而get请求则作为读操作,读操作容易被浏览器缓存

现在打开blog目录下的views.py,来定义一个对站点首页的get请求进行处理的视图类。views.py更新后的代码如下:

from django.shortcuts import render
# 新增的代码
from django.views import View
# Create your views here.


# 新增的代码
class Home(View):    
    def get(self, request):        
        return render(request, "blog/home.html")

在views.py中,新增了一行代码:

from django.views import View

View是在django.views中定义的视图基类,从该基类中进行继承,可以改写视图的get和post方法。视图类的get和post方法对应于http协议的get和post请求。在文件中同时新增了一个Home类,该类继承于View类:

class Home(View):
    def get(self, request):        
        return render(request, "home.html")

在Home类中,改写了View类的get方法,在get方法中通过render方法将home.html文件内容响应给客户端(这里的客户端通常指浏览器)。现在已经通过django应用中的views.py, 定义了对客户端请求进行处理的逻辑,接下来的问题是,如何将浏览器的请求与django视图进行关联?此时需要在django项目的urls.py中进行路由映射, 以将客户端对站点url的请求与django视图进行关联。现在打开chipscoco目录下的urls.py,脚本文件更新后的代码如下:

# -*- coding:utf-8 -*-
from django.contrib import admin
from django.urls import path

# 新增的代码
import blog.views as blog
urlpatterns = [ path('admin/', admin.site.urls),
                # 新增的代码    
                path('', blog.Home.as_view()),
              ]

在urls.py中一共新增了两行代码:

(1) import blog.views as blog

该行代码表示导出blog下的views模块,并设置其别名为blog

(2) path('', blog.Home.as_view())

path是django内置的函数,表示将客户端的url访问与django视图进行关联。

代码path('', blog.Home.as_view()),表示将对服务器根目录的请求与视图中的Home类进行关联。在django中,如果对应的视图类型为类类型,则必须通过as_view的类方法来进行转换。通过以上操作 ,我们将url与django视图进行了关联,现在重新梳理下核心逻辑:

(1) 在django应用下的views.py中编写特定的视图,django中的视图用来处理客户端的访问请求。

(2) 在django项目中的urls.py中导入视图模块

(3) 使用path函数将url与对应的视图进行关联

在我们编写的Home视图中,通过render函数html文件的内容响应给客户端。这里的html文件其实就是django中的模板文件。在1.5.3节中会对django中的模板进行简单介绍。

1.5.3 django模板

django中的模板主要指的是html文件,django在渲染模板文件前,需要先在django服务器中找到该模板文件。在django中,通常的做法是为模板文件配置一个指定的目录,以存放模板文件。通过以下步骤,可以配置django的模板目录:

(1) 打开chipscoco目录中的settings.py

找到与模板配置相关的两个全局变量,分别是:BASE_DIR,TEMPLATES

BASE_DIR表示服务器的根目录,TEMPLATES变量用来配置django模板的meta信息, 例如模板引擎,模板文件的存放路径等。

(2) 创建templates目录,存放模板文件

在django-project中创建templates目录,并在settings.py中进行模板路径的配置。打开settings.py,修改全局变量TEMPLATES。更新后的代码为:

TEMPLATES =[
       {        
       'BACKEND': 'django.template.backends.django.DjangoTemplates',         
       'DIRS': [os.path.join(BASE_DIR,"templates")],        
       'APP_DIRS': True,        
       'OPTIONS': { 'context_processors': ['django.template.context_processors.debug',                
                           'django.template.context_processors.request',
                           'django.contrib.auth.context_processors.auth',                
                           'django.contrib.messages.context_processors.messages',            
                          ],        
             },    
      },]


在以上代码中对DIRS属性进行了修改,将templates目录配置为模板文件的存放目录。由于BASE_DIR指的是django服务器的根目录路径,故通过代码 os.path.join(BASE_DIR, "templates")可以获取templates目录的绝对路径。

1.5.4 注册django应用

在定义了url与视图的路由映射,以及模板目录的配置以后,需要在django项目中注册指定的django应用。打开chipscoco目录中的settings.py,找到与应用注册相关的全局变量:INSTALLED_APPS。INSTALLED_APPS是一个列表类型,用来加载指定的Django应用。

在INSTALLED_APPS中添加chipscoco应用, 更新后的代码为:

INSTALLED_APPS = [
                  'django.contrib.admin',
                  'django.contrib.auth',    
                  'django.contrib.contenttypes',    
                  'django.contrib.sessions',    
                  'django.contrib.messages',    
                  'django.contrib.staticfiles',    
                  # 新增后的代码    
                  'blog',
                 ]

通过以上操作,我们配置好了django应用的模板目录以及注册了我们的django应用blog,现在可以开始自定义站点页面。

1.5.5 你好django

通过1.5.1节,1.5.2节,1.5.3节中的学习以及操作,我们对url,django视图、模板有了基本的认识。现在请读者按照以下步骤,来访问我们自定义的站点页面:

(1) 在templates目录中创建blog目录,在blog目录中创建home.html文件,并输入以下html代码:

<html>
<head>
<title>Django的美妙爵士乐</title>
</head>
<body>  
    <h1>Hello Django</h1>
</body>
</html>

(2) 在浏览器地址栏中输入http://127.0.0.1:8080/


在进行第二步操作前,如未启动django服务器,则必需先进入windows命令行,切换到django-project目录,执行python manage.py runserver 8080来启动应用服务器。在浏览器中如见到下图页面的输出,表示成功地定义了站点页面。

image.png

1.5.6 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4)
Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:


已有4位薯条发表了看法:

  • 访客

    访客  评论于 2021-01-05 16:17:31  回复

    老师,全局变量BASE_DIR,如何修改。

  • 访客

    访客  评论于 2021-01-05 16:17:40  回复

    老师,全局变量BASE_DIR,如何修改。

  • 访客

    访客  评论于 2021-01-05 21:15:24  回复

    # 新增的代码
    import blog.views as blog
    老师 这段代码报错了

  • 刘家三少

    刘家三少  评论于 2021-01-05 21:16:59  回复

    # 新增的代码
    import blog.views as blog
    这段代码报错

欢迎 发表评论: