视图一般都写在app的views.py中。并且视图的第一个参数永远都是request(一个HttpRequest)对象。
如:from django.http import HttpResponse
def news(request):
return HttpResponse("新闻!")
urls.py
from news import viewsurlpatterns=[path("news",views.news)]
1.URL添加参数
url中包含了一些参数需要动态调整。比如简书某篇文章的详情页的url,是https://www.jianshu.com/p/a5aab9c4978e后面的a5aab9c4978e就是这篇文章的id.那么简书的文章详情页面的url就可以写成https://www.jianshu.com/p/,其中id就是文章的id。那么如何在django中实现这种需求呢。

也可以通过查询字符串的方式传递一个参数过去。示例代码如下:

2.URL模块化
URL中包含另外一个urls模块:在我们的项目中,不可能只有一个app,如果把所有的app的views中的视图都放在urls.py中进行映射,肯定会让代码显得非常乱。因此django给我们提供了一个方法,可以在app内部包含自己的url匹配规则,而在项目的urls.py中再统一包含这个app的urls。使用这个技术需要借助include函数。示例代码如下:

新建一个bookapp为例,cmd在项目中django路径下面新建一个bookapp(D:\学习\Python\first_django>python manage.py startapp book);
创建一个属于bookapp自己的urls.py文件 调用path文件(from django.urls import path)然后再定义自己的views.py文件(from .import views);
在book\urls.py里面完成

接着再book\views.py里面完成

最后URL模块完成.
3.URL命名与反转
1.为什么需要URL命名:因为在项目开发的过程中URL地址可能经常变动,如果写死会经常去修改
2.如何给一个URL指定名称:path("",views.index,name="index")
3.应用命名空间:在多个app之间可能产生同名的URL,这时候为了避免这种情况,可以使用命名空间来加以区分。在urls.py中添加app_name即可。
再自己创建的urls.py文件里面填写

path("duomeiti/",views.login,name='login'),这句话的意思是给你的文件'login'命名为duomeiti这样今后需要修改名字的话就方便很多.同时再你的这个文件同一个地方的views.py文件里面编写 记得添加库 :reverse

reverse的作用是回调,回到括号里面的内容.
坏处:如果多个app中都存在login这个命名的文件的话回调将出错.
这时候就应用到: 应用命名空间和实例命名空间.应用命名空间在urls.py中添加app_name即可。实例命名空间使用,namespace='实例命名空间'
再一个app自己新建的urls.py文件里面 添加一个空间命名app_name ='front',然后来到该app的views,再上一个的基础上加 '应用命名空间':函数名称,如:

4. URL反转传递参数
再上一个的基础上在app的views的某个函数的返回值里面加入 kwargs={"uid":1};(字典里面的内容自己填写)如:

再到该app的自己创建的urls里面做映射

自定默认参数
创建一个app 在app里面创建urls.py文件然后填入一下代码

第一个箭头是获取你输入的id值.第二个箭头是默认id值.
再app中的views.py文件中

第一个红箭头是定义的参数,第二个箭头就说用id值来查找列表中对应的数值.
5. re_path函数
有时候我们在写url匹配的时候,想要写使用正则表达式来实现一些复杂的需求,那么这时候我们可以使用re_path来实现。re_path的参数和path参数一模一样,只不过第一个参数也就是route参数可以为一个正则表达式。
例如:

再app的urls里面添加文件 re_path;

re_path(r"move_list/(?P<year>\d{4})",views.move_list),是re_path的格式;