Python编程+Django框架web网站开发(3)

一、前后端数据交互

  • 用户通过浏览器输入网址(域名),通过dns服务器解析为一个ip地址,这个ip就是web服务器的ip
  • 通过cmd命令的方式可以查看到域名对应的ip地址

在这里插入图片描述

  • 用户访问的是Django框架开发的网站,那么服务器端马上会进入url.py这个文件中的列表urlpatterns,服务器就是按照这个列表中的值从上到下的顺序读取到匹配用户浏览器地址的规则,找到就直接停止匹配,并跳转到匹配到的函数中( 这里对应的是要向浏览器输出的网页内容)
  • 如果用户的浏览器要想后台通过网址url的方式来向服务器后台传输数据,那么可以通过浏览器地址后面加上**?参数名称=值**的方式来传递。

在这里插入图片描述
在这里插入图片描述

二、一些重难点的框架文件作用

init.py的作用:在文件夹内默认存在的一个文件,创建项目和应用的时候默认给的。
主要作用:是为了给其他文件使用之前预载一些值或者文件(预处理)。
migrations文件夹:是models.py文件定义类以后,会生成一些数据库数据表操作的代码。
这个文件夹是一个临时文件夹。只有在迁移命令migrate执行后才会真正被运行。
settings.py文件:是针对整个项目应用的配置,影响着这个网站的方方面面(数据库连接配置、资源文件配置、模板路径配置、中间件)

在这里插入图片描述

三、http接口开发

理解http接口

api接口:应用程序接口。(软件动态链接库接口、http接口、socket接口等)
http主要用于网页上面的传输协议。
使用http接口,就相当于调用网址这种形式
前端开发者:调用http网址,获取数据;利用http网址向服务器接口传送数据,以获得指定的数据或者改变服务器上的一些数据。
https://网址?参数1=值1&参数2=值2…
通过url网址的形式可以传递多个参数,每个参数之间使用&符号隔开

json格式化

方法1:
使用python的json库,用HttpResponse输出json字符串。
方法2:
使用django框架中的jsonRespon直接可以返回json数据。

json数据类似于pthon数据
json对象:类似python中的字典{ 键1:值1, 键2:值2…}
json数组:类似python中的列表[值1,值2] 这个值可以是每个对象,也可以是列表。
被序列化(将有数据类型的变量转换为json格式的结果)以后**\u662f是unicode码**
前端开发人员拿到json字符串以后,进行反序列化即可把数据取到相应的位置。

def getNews(request):
    list1 = [{'title':"Who am I?我是谁", "date":"2024-02-28"},
             {'title':"Who are you?你是谁", "date":"2024-02-29"}]
    # 第一种返回形式
    # strjs=json.dumps(list1)
    # return HttpResponse(strjs)

    # 第二种返回形式
    return JsonResponse(list1, safe=False)

配置url.py中的路由

path('newslist/', downloadweb.views.getNews),

在这里插入图片描述

四、template模板页

  • 创建模板文件夹template,里面有很多的html模板
    创建博客网址首页index.html文件
    在这里插入图片描述
  • 配置模板页文件夹
    打开setting.py,找到TEMPLATE变量,找到键为DIRS,设置它的值如下:
'DIRS': [str(BASE_DIR)+"/downloadweb/template"],

注意:str(BASE_DIR)代表的是项目根目录
在这里插入图片描述

  • 在view.py下编写网页的功能函数
    利用render方法来渲染html网页
    render( request, 要渲染的网页)
def download(request):
    return render(request, "index.html")
  • 配置路由
path('',downloadweb.views.download),

在这里插入图片描述

五、变量数据的传递

有数据的数据传递

从view后台视图函数传递到模板页输出

  • render函数的第三个参数的用法,用来向模板页传递变量
    参数:可以写成键值对的形式进行传递。
  # 第一种传值方式
    return render(request, "index.html", context={"downloading":"软件下载地址"})
    # 第一种传值方式
    downloading="软件下载地址"
    return render(request, "index.html", context={"downloading": downloading})

在这里插入图片描述
注意的是:数据传递给的是模板页,字典的形式传递的,字典的键作为模板页中的变量。

  • 接收:在模板页里面接收
    格式使用{{ 变量的值}}
    符号{{}} 是在框架渲染html的时候,字符串替换的标志。

无数据的数据传递

  • 使用default,default在模板页中的变量输出用法属于模板页中的过滤器的用法之一。

  • 使用格式:
    在template模板页中需要输出变量的地方,将变量的格式输出如下:

   <h5>Dev{{ downloading|default:"尚未配置软件的下载地址"}}</h5>

在这里插入图片描述

总结:
将变量数量从后台的context参数传递给template模板。
通过将后台的键在前台的{{}}中输出作为变量。
dafault数据过滤的简单方法