四方显神

导航

Django开发笔记(二) 入门案例

一、Django案例1 给客户端返回字符串

Django启动文件是manage.py,不过现阶段没有必要看源码(后期看),manage.py如何实现,路由怎么完成,这些先放放。

上一篇的图:

写一个简单的入门案例:

请求的第一步是urls.py,现在先看第一步,我们在urls.py里做了哪些事:

from django.contrib import admin
from django.urls import path
from django.shortcuts import HttpResponse


# 每一个视图函数必须带一个request形参
# 响应 return的必须是一个HttpResponse类实例对象 这个类是Django帮忙构件好的吗,只需要引用一下就好(L18所示)
def get_timer(request):
    '''

    :param request:
    :return: HttpResponse
    '''
    return HttpResponse("hello django")

def get_index(request):
    return HttpResponse("Welcome")


urlpatterns = [
    # 请求路径和视图函数的映射关系,一旦请求路径和某个path中的路径匹配成功则调用该path中的视图函数
    path('admin/', admin.site.urls),
    # 加一个自己的请求,访问timer页面的时候能看到时间
    path('timer/',get_timer),
    path('',get_index)
]

然后访问就会根据不同路径出现不同的页面:

这里有一点比较方便的注意点,改动了代码后项目不用重启,Django有自动监听机制,代码有改动保存过程中,自动将项目重启了,所以改动了代码后不用重启,去访问是可以体现的。

现在是一个最简单的流程建立起来了,包含了一个路由分发,有视图函数,不过没有数据库部分、页面渲染部分。

另外可以用F12"检查"功能看前端请求和后端响应,比较清楚:

解耦合:

以上的案例没有解耦合,我们只需要将urls.py里涉及视图函数的代码放到对应应用的views.py里,再在urls.py里引用这些views.py即可:

这里加一点关于目录结构的知识点:

根目录怎么找:去找启动文件是哪个(这个案例中是manage.py),这个启动文件所在的目录结构(这个案例中是mysite3),这个目录结构就会添加到sys.path里去,所以在整个项目运行的过程中,都是从这个目录下(mysite3目录)进行导入的。所以我在urls.py里想找一个app01里的views.py文件,就不能直接from views.py,找不到的,需要from app01 import views (像上图一样写也行,那是自动import的格式)。

你要是from app01 import views这样引,那就是下图这样写咯:

 二、Django案例2:给客户端返回静态页面

 现在我们想要访问的时候返回一个页面,也就是用上template,在templates文件夹里新建一个html文件,作为我们的模板文件。

render渲染函数,将数据库中的数据嵌入到页面中,如果没有数据,它就帮我们去拿页面。

render(request,"模板文件")

这样我们再去访问url根路径,就会出现index.html里写的内容了。

关于render怎么找到模板文件index.html的:通过配置文件。在我们的项目里,有一个全局文件,与项目名同名叫mysite3,里面有个叫settings.py的配置文件,配置文件里有个TEMPLATES,里面的DIRS,这个就是render函数在找的时候的指定路径:

其中BASE_DIR是这个配置文件中定义的一个量:

 __file__当前文件,那么Path(__file__).resolve().parent.parent就是当前文件的一个目录的父目录的父目录,也就是项目目录。

os.path.join:将两个路径拼接在一起,拿到的就是项目目录下的templates这个路径。注:我图上的是 'DIRS': [BASE_DIR / 'templates'] ,老师那里是'DIRS': [os.path.join(BASE_DIR / 'templates')]。效果是一样的。

因此,render每次,一直,都是去这个路径找模板文件的,所以咱们那个templates文件夹的名字也不可以改,除非你把配置一起改了。

 

那么如果我们在templates如果也想完成一个解耦,也就是在templates文件夹里给每个应用新建一个文件夹,比如上文的index.html放入app01文件夹里,那么我们的return render(request, "index.html")就需要改一下了,不然就找不到咯(render只能找到templates文件夹下的)(不过其实我们的pycharm会自动给我们补全这个路径return render(request, "app01/index.html"),它补你也别太依赖,还是要自己理解一下的)。

三、Django案例3:给客户端返回动态页面

 

posted on 2023-12-04 13:47  szdbjooo  阅读(143)  评论(0)    收藏  举报