django 学习笔记-使用django和视图

创建了一个demo的项目后,有如下结构:

目录结构

│─ manage.py    # 终端脚本命令,提供了一系列用于生成文件或者目录的命令,也叫脚手架
└─ dome/        # 主应用开发目录,保存了项目中的所有开发人员编写的代码, 目录是生成项目时指定的
    │- asgi.py     # django3.0以后新增的,用于让django运行在异步编程模式的一个web应用对象
    │- settings.py  # 默认开发配置文件
    │- urls.py      # 路由列表目录,用于绑定视图和url的映射关系
    │- wsgi.py      # wsgi就是项目运行在wsgi服务器时的入口文件,本质上来说,manage.py runserver 内部调用的就是wsgi
    └- __init__.py

快速使用django

在django中要提供数据展示给用户,我们需要完成3个步骤:

1 . 在目录下创建子应用

2 . 在子应用的视图文件views中编写视图函数

3 . 把试图views文件和urls文件进行绑定注册到django项目,用户就可以通过urls文件中的地址访问,用户访问的时候,django自动根据url地址执行对应的视图函数

1 . 创建子应用

必须借助项目生成的manage.py文件才能创建一个子应用

python manage.py startapp 子应用名称

子应用的名称将来会作为目录名而存在,所以不能出现特殊符号,不能出现中文等多字节的字符

2 . 在子应用的试图文件views中编写视图函数

1604738544521

在子应用下的试图文件views中写代码:

from django.http.response import HttpResponse

def index(request):     参数request必写
	print("视图运行了")
	return HttpResponse("hello world !!")
	

3 . 绑定路由和视图的映射关系

1604738621607

要绑定子应用和主应用的映射关系,将主路由文件和子应用的views文件绑定起来

在主路由的demo/urls.py中写代码:

from django.contrib impoprt admin
from django.urls import path
from home.views import index   从子应用的views文件中引入index函数

path("url地址",视图函数)
这个url地址是在浏览器访问地址后面加的地址:127.0.0.1:8080/index

urlpatterns = [
    path('admin/', admin.site.urls),
    path("index", index),
]

因为上面我们绑定index视图函数的url地址是index,所以我们可以通过http://127.0.0.1:8000/拼接url地址index来访问视图函数

1604738714168

上面的过程,我们就可以展示数据给客户端浏览器了.但是这个过程发生了什么,怎么实现的?我们需要清晰2个概念.web服务器路由ip

web 服务器

web服务器,全称也叫`http web 服务器`,专门用于提供网页浏览服务器的一类软件.
可以通过各类语言使用代码开发.
我们执行manage.py文件中, 之所以用户能使用浏览器访问就是web服务器的功劳.
常见的web服务器软件:  
    nginx,uwsgi,gunicorn,apache,tomcat,iis
其中, uwsgi和gunicorn就是使用python开发的web服务器软件.

注意: 大部分的项目框架都有内置的测试web服务器.其中django框架就内置了python解析器提供的wsgiref模块,这个模块是python官方提供给开发者进行学习测试使用的.不能用于项目的线上环境中,
    因为这个测试web服务器,性能不好,不支持多线程.
    
wsgi 就是python基于cgi标准实现的http通讯技术
asgi 就是wsgi的异步版本,async就是这个a

1604739501434

路由基本概念

Route 路由,时候一种映射关系!!

路由是把客户端请求的url地址(如:127.0.0.1:8080)和用户请求的应用程序[这里意指django里面的视图]进行一对一绑定映射的一种关系.

如:在路由文件demo/urls.py中代码

from home.views import index
urlpatterns = [
    path('admin/', admin.site.urls),
    path("index", index),
]

当然,在项目中,我们常常说的路由,一般是一个类. 这个类完成了路由要做的事情.

视图基础

django的视图主要有2种,分别是函数视图类视图.现在刚开始学习django,我们先学习函数视图(FBV),后面再学习类视图[CBV].

Function BaseView 函数基本视图

Class BaseView 类基本视图

函数视图

django中的所有函数视图必须编写在子应用的views.py文件中!!!!!!

from django.http.response import HttpResponse

def 函数名(request):  参数request必写
	.....代码逻辑.....
	return HttpResponse("返回的内容)
	
注意:: 函数名称,同一个模块下不能重复使用一个函数名,同时函数命名采用变量命名规则.

视图请求

限制http请求


web项目运行在http协议下,默认肯定也支持用户通过不同文档http请求发送数据来

常用的http请求:
POST   		添加/上传
GET 		获取/下载
PUT/PATCH   修改,其中PUT表示修改整体数据,PATCH表示修改部分数据
DELETE   	删除,废弃

( 1 ) django支持让客户端只能通过指定的http请求来访问到项目的视图

子应用home/的views.py文件代码:

## 让用户发送POST请求才能访问页面

from django.views.decorators.http import require_http_methods

这里的装饰器@require_http_methods就是可以发送http请求的,
后面一定要带参数:而且参数是一个数组(列表)参数就是http请求类型

@require_http_methods(["POST"])
def login(request):
	return HttpResponse("登陆成功!!")
	

( 2 )路由绑定

主应用demo/下的路由文件urls.py代码

from django.contrib import admin
from django.urls import path
from home.views import index,login
urlpatterns = [
	path("admin/",admin.site.urls),
	path("index",index),
	path("login",login),
]

通过执行manage.py文件可以访问到浏览器

通过浏览器,访问效果http://127.0.01:8000/login

1604742982034

上面地址无法访问内容,就是因为我们在视图中设置了客户端只能通过POST请求访问当前视图,而用户默认通过浏览器进行访问地址,默认使用的是GET,所以出现无法访问情况.那么正常情况下,我们用户发送POST一般肯定通过使用html网页中的表单/js里面提供http请求的ajax才可以做到发送POST或GET或PUT/PATCH,而现在我们没有表单,因此我们可以安装一个postman的软件,这个软件类似浏览器但是功能比浏览器要强大,专门提供给开发人员免费使用的.

选择适合自己操作系统的postman软件
官网下载地址: https://www.postman.com/downloads/

1604743289381

把post地址栏左边的http请求方法改成POST,点击右边的send,访问页面,会显示视图内容

http://127.0.0.1:8000/login,效果:

1604743377116

上面出现一大堆提示,但其实已经访问到项目中了, 当然此处提示的CSRF其实是django为了保护网站安全设置一种安全访问机制.后面我们学习到,现在我们可以先打开demo/settings.py配置文件中的MIDDLEWARE中通过注释关闭掉这个功能先.

demo/settings.py,代码:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 先注释掉这个功能   # ctrl+/
    # 'django.middleware.csrf.CsrfViewMiddleware',  
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

1604743522110

关闭了csrf防范功能以后,继续使用postman访问http://127.0.0.1:8000/login效果如下:

image-20210527091930113

设置路由绑定视图

经过上面的学习,可以发现,每次编写视图函数都需要到路由文件中进行地址绑定.

这个过程必须每次都要进行,但是随着项目的开发,以后我们的视图函数肯定是越来越多的.

因为将来视图函数太多,导致无法明确区分哪些路由属于哪一个子应用的.我们可以先在刚开始项目的时候,把路由放回到子应用目录下.

1 . 在子应用home下创建子路由文件,一般路由文件名建议是urls.py

2 . 把子应用home下面的视图绑定代码转到子应用路由文件home/urls.py中.

子应用路由文件home/urls.py代码:

"""子应用路由"""
# 路由使用过程中,django提供了2个函数给我们把url和视图进行绑定映射,
#1. django.urls.path
#2. django.urls.re_path

from django.urls import path
# 将子应用的视图文件引入到这里来进行绑定
from . import views
urlpatterns = [
    path('home', views.index),
    path('list', views.book_list),
    # path("路由uri地址", 视图代码)
    path('login', views.login),
]

# 最终用户访问的视图url地址:(原理)
# url = 总路由的公共url地址 + 子应用路由的uri地址

3 . 在总路由文件demo/urls.py中通过include加载路由文件到django项目中

主应用路由文件demo/urls.py代码

"""总路由"""
from django.contrib import admin
from django.urls import path
urlpatterns = [
	path("admin/",admin.site.urls),
	## path("公共url地址",include("子应用目录名.路由文件"))
	path("book/" , include("home.urls") ),
]

当django项目中的路由分成总路由和子应用路由以后, 那么用户访问视图,则访问地址的规则:

http://127.0.0.1:8000/路由前缀+子应用路由的url地址

例如: 总路由中注册子应用路由时, 路由前缀为 "home"

​ 子路由文件中有一个函数视图的url地址为: "index",

​ 那么用户访问时正确的地址就是: http://127.0.0.1:8000/homeindex

​ 当然,如果路由前缀是 "home/", 而子路由的url地址为 "index"

​ 则用户访问时 正确的地址就是: http://127.0.0.1:8000/home/index

posted @ 2021-05-31 22:35  豆#豆  阅读(151)  评论(0)    收藏  举报