Django学习笔记(2)--视图函数

用pycharm打开FDJ项目python

URL分发器数据库

视图:django

视图通常都写在app的view,py中。而且视图的第一个参数永远都是request(一个HttpRequest)对象。这个对象存储了请求过来的全部信息,包括携带的参数以及一些头部信息等。在视图中,通常是完成逻辑相关的操做。好比这个请求使添加一篇博客,那么能够经过request来接收到这些数据,而后存储到数据库中,最后再把执行的结果返回给浏览器。视图函数的返回结果必须是httpResponse对象或者子类的对象。浏览器

实例:app

建立book app:函数

(Django-env) python manage.py startapp book

在book app下的views.py中添加:url

from django.http import HttpResponse def book_list(request): return HttpResponse("书籍列表:")

URL映射:spa

回到FDJ目录下的urls.py中:code

from book import views urlpatterns = [ path('admin/', admin.site.urls), path('book/', views.book), ]

打开浏览器输入http://127.0.0.1:8000/book/对象

补充:

视图函数的返回的对象必须为:

URL添加参数:

有时候,url中包含了一些参数须要动态调整。好比简书某篇文章的详情页的url,是https://www.jianshu.com/p/a5aab9c4978e后面的a5aab9c4978e就是这篇文章的id,那么简述的文章详情页面的url就能够写成https://www.jianshu.com/p/<id>,其中id就是文章的id,那么如何在django中实现这种需求呢。这时候咱们就能够在path函数中,使用尖括号的形式来定义一个参数。好比我如今想要获取一本书籍的详细信息,那么应该在url中指定这个参数。示例代码以下:

在views.py中添加

def book_detil(request,book_id):
    #在数据库中根据id提取图书信息
    text = book_id
    return HttpResponse(text)

在urls.py中的urlpatterns中添加

path('book/detil/<book_id>/',views.book_detil),

而后在浏览器网址栏输入http://127.0.0.1:8000/book/1234

固然能够加更多参数,好比

path('book/detil/<book_id>/<categrary>',views.book_detil),

那么views.py中的book_detil必须改为:

def book_detil(request,book_id,categrary):
    #在数据库中根据id提取图书信息
    text = book_id
    #categrary....categrart的操做。。。
    return HttpResponse(text)

 

另外一种url传参数的方式是字符串匹配:

在urls.py中的urlpatterns中添加

path('book/author',views.author_detil),

在views.py中添加

def author_detil(request):
    author_id = request.GET.get('id')
    text= author_id
    return HttpResponse(text)

在浏览器网址栏输入http://127.0.0.1:8000/book/author/?id=111

 

 

 

 

总结:

1.url映射:

  • 为何会去urls.py文件中寻找映射呢?在'urls.py'中咱们全部的映射,都应该放在‘urlpatterns’这个变量这个变量中。
    • 是由于在'settings.py'文件中配置了‘ROOT_URLCONF’为'urls.py'。全部django会去'urls.py'中寻找。
  • 全部的映射不是随便写的。而是使用'path'的第一个参数中,使用'<参数名>'

 

2.url传参数:

  • 采用在url中使用变量的方式:在path的第一个参数中,使用'<参数名>'的方式能够传递参数。而后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,否则就找不到这个参数,另外,url中能够传毒多个参数。
  • 采用查询字符串的方式:在url中不须要单独的匹配查询字符串的部分。只须要在视图函数中使用'request.GET.get(参数名称)'的方式来获取。由于查询字符串使用的是'GET'请求,因此咱们经过'request.GET'来获取参数。而且由于'GET'是一个相似于字典的数据类型,全部获取取值字典的方式都是同样的。

 

 

补充:

URL命名与反URL

1.为何须要url命名?

  • 由于url是常常变换的,若是在代码中写死了可能会常常改代码,给url去个名字,之后使用url的时候就是用他的名字进行反转就能够了,就不须要写死url了。

2.如何给一个url指定名称?

  • 在'path'函数中,传递一个'name'参数就能够指定。示例:

 

urlpatterns = [
    path('',views.index,name='index'),          
]

 

应用命名空间:

  • 在多个app之间,有可能产生同名的url,这时候为了不反转rul的时候传声混淆,可使用命名空间,来作区分,定义应用命名空间很是简单,只须要在'app'的'urls.py'中定义一个叫作'app_name'的变量,来指定这个应用的命名空间便可。示例:
#应用命名空间
app_name = 'front'

urlpatterns = [
path('',views.index,name='index')
]

 

之后在作反转的时候就可使用'应用命名空间url名称'的方式进行反转,示例:

login_url = reverse('front:index')
相关文章
相关标签/搜索