首页 > 其他分享 >Django博客开发教程:URL与视图函数

Django博客开发教程:URL与视图函数

时间:2023-08-08 15:11:49浏览次数:42  
标签:http 函数 views URL 视图 Django

在讲URL与视图函数之前我们先给大家简单介绍一下用户访问网站的流程。我们访问一个网站的时候,一般先打开浏览器,然后在浏览器的地址栏里输入一个网址,也就是URL,然后回车,我们就可以在浏览器里看到这个网址返回的内容。这是我们能看得见的过程,还有一些我们看不见的过程,那就是:当我们在浏览器里输入网址(URL)时,回车,然后浏览器就会向目标网址发送一个HTTP请求,服务器收到请求之后就会给这个请求做出一个响应,这个响应就是把对应的内容通过浏览器渲染出来,呈现给我们看。这个过程就是请求与响应。

下图,就是请求响应的过程。

web2.jpg

更多相关的内容,大家可以查看文章:请求与响应

上面我们提到了URL,这个URL在我们的Django中,其实是由我们自己构造的。(这个说法不太严谨,但为了方便大家理解之后的内容,先当这说辞是正确的。)

Django中,我们约定URL是在项目同名目录下的urls.py文件里urlpatterns列表构造的。

myblog/myblog/urls.py

1.jpg

表现形式如下:

urlpatterns = [
    path(正则表达式, views视图函数,参数,别名),
]
括号里的参数说明:
1、一个正则表达式字符串
2、一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
3、可选的要传递给视图函数的默认参数(字典形式)
4、一个可选的name参数(别名)

比如我想构造三个URL,网站首页(http://www.django.cn/)、新闻(http://www.django.cn/news/)、论坛(http://www.django.cn/bbs/),我们可以这么做。

urlpatterns = [
    path('', views.index), #里面留空,代表首页
    path('news/',views.news),#news
    path('bbs/',views.bbs),#bbs
]

URL就是这么构造的,我们的域名www.django.cn不需要写,完整的URL应该要这么写:path(正则表达式, views视图函数,参数,别名), 里面的正则表达式, views视图函数,是必须要写的,而参数,别名是可选的。我们在有特殊需要的时候才写。关于URL详细介绍和使用方法可以查看文章:路由配置系统URLconf

通过上面我们可以看到,每个URL都对应一个views视图函数名,视图函数名不能相同,否则会报错。视图函数,Django中约定写在APP应用里的views.py文件里。然后在urls.py文件里通过下面的方式导入:

from APP应用名 import views
from APP应用名.vews import 函数名或类名

视图函数是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。这个视图函数代码一般约定是放置在项目或应用程序目录中的名为views.py的文件中。

http请求中产生两个核心对象:
1、http请求---->HttpRequest对象,用户请求相关的所有信息(对象)
2、http响应---->HttpResponse对象,响应字符串

之前我们在欢迎页面这章的时候有操作过一次。我们回顾一下:

首先,打开打开bolg目录下的views.py文件,写一个hello视图函数,在里面输入:

from django.http import HttpResponse

def hello(request):
   """
  写一个hello函数,通过request接收URL或者说是http请求信息,
  然后给这个请求返回一个HttpResponse对象
  """
    return HttpResponse('欢迎使用Django!')

例子里,我们用到的request,就是HttpRequest对象。HttpResponse("欢迎使用Django!"),就是HttpRequest对象,它向http请求响应了一段字符串对象。

我们打开myblog目录下的urls.py文件中先导入视图函数,然后构造一个URL,代码如下:

from blog import views  #导入视图函数
urlpatterns = [
    ...
    path('', views.hello),   #这个是我们构造的URL
]

代码写完之后,启动项目就可以在浏览器里看到视图函数返回的字符串"欢迎使用Django!"

每一个URL都会对应一个视图函数,当一个用户请求访问Django站点的一个页面时,然后就由Django路由系统(URL配置文件)去决定要执行哪个视图函数使用的算法。

通过URL对应关系匹配 ->找到对应的函数(或者类)->返回字符串(或者读取Html之后返回渲染的字符串)这个过程也就是我们Django请求的生命周期。

视图函数,就是围绕着HttpRequest和HttpResponse这两个对象进行的。了解更多相关知识,可查看入门教程里的:视图函数

标签:http,函数,views,URL,视图,Django
From: https://www.cnblogs.com/yoloooo/p/17614379.html

相关文章

  • Request.url请求路径的一些属性
    https://blog.csdn.net/u012726702/article/details/51737795Request.url请求路径的一些属性1,Request.UrlReferrer.AbsolutePath=获取URL的绝对路径例:"/Manager/Module/OfficialManage/Issuedadocument/Issuedadocument_WorkNew.aspx"2,Request.UrlReferrer.AbsoluteUri=获取绝......
  • Django博客开发教程:使用富文本编辑器添加数据
    在Djangoadmin后台添加数据的时候,文章内容文本框想发布一篇图文并茂的文章需就得手写Html代码,这十分吃力,也没法上传图片和文件。这显然不是我等高大上程序猿想要的。为提升效率,我们可以使用富文本编辑器添加数据。支持Django的富文本编辑器很多,这里我推荐使用DjangoUeditor,Uedi......
  • Django博客开发教程:用Admin管理后台管理数据
    上节我们我们把数据库迁移到数据库里去了,那么现在我们数据库里是个什么样的情况呢?我们点击Pycharm右上角的Database,然后在网站项目里选中我们的数据库文件db.sqlite3,把它拖到Database框里。然后点击db,就可以查看到我们的网站数据库,我们可以对数据进行增、删、改、查操作。更多......
  • Django博客开发教程:基础配置
    创建项目之后,我们需要对项目进行最基础的配置。这些配置是我们做项目的时候必须要配置的,所以我们先提前配置好。我们打开myblog目录下的settings.py文件。一、设置域名访问权限myblog/settings.pyALLOWED_HOSTS = []      #修改前ALLOWED_HOSTS = ['*']   #修改......
  • Django 之日志配置
    Django之日志配置日志作为服务的,排查故障分析性能及问题的重要“帮手”,是服务必不可少的。 配置日志定义日志记录器定义了三个日志记录器,分别针对Django、自定义应用程序和自定义库。每个日志记录器都有不同的日志级别和处理器,例如控制台和文件处理器。Django日志记......
  • spring-mvc 系列:视图(ThymeleafView、InternalResourceView、RedirectView)
    目录一、ThymeleafView二、转发视图三、重定向视图四、视图控制器view-controller五、配置jsp解析SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户SpringMVC视图的种类很多,默认有转发视图和重定向视图当工程引入jstl的依赖,转发视图会自动转换为Js......
  • Azure 解决方案:如何实现URL重定向?
    51CTO博客地址: https://blog.51cto.com/14669127Azure培训视频地址: https://space.bilibili.com/2000820534近期遇到一些客户,在访问第三方URL的时候,因某种原因希望URL中能包含组织结构的域名,实现URL重定向来满足安全策略,今天给大家分享如何利用AzureFrontDoor配置URL重定向。......
  • urlfinder
    再推荐个工具:urlfinder,能够快速查找隐藏在页面或js中的敏感或未授权api接口,把页面中的链接提取出来 支持windows 项目地址:https://github.com/pingc0y/URLFinder......
  • 微信小程序13 在请求url获取返回值后修改data变量的一个问题,es6箭头函数或外部定义变
    在之前解密电话时,我们有请求wx的apiwx.request({url:'https://api.weixin.qq.com/sns/jscode2session',data:{},success:(re)=>{//console.log('re:'+JSON.stringify(re));this.......
  • openGauss学习笔记-33 openGauss 高级数据管理-视图
    openGauss学习笔记-33openGauss高级数据管理-视图视图与基本表不同,是一个虚拟的表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到......