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:给客户端返回动态页面
浙公网安备 33010602011771号