Django编写第一个应用视图

时间:2022-09-15 14:11:40

前面我们创建了django项目,并启动了服务web服务,下面在项目中创建应用,开启我们的编写之旅。

项目中创建应用

 

  • 首先切换到项目目录中
  • 其次输入命令:python manage.py startapp 项目名称(自定义名称)
  • 最后按下 enter 键,创建成功
  1. (venv) apple:hello_django lifeng$ python manage.py startapp hello_apps 

Django编写第一个应用视图

编写第一个视图

 

在创建的应用中创建视图:

  1. from django.contrib import admin 
  2. from django.urls import path 
  3. from hello_apps import views 
  4.  
  5. urlpatterns = [ 
  6.     # admin这个是系统自带的 
  7.     path('admin/', admin.site.urls), 
  8.     path('hello/', views.hello), 

在urls中配置路径:

  1. def _path(route, view, kwargs=None, name=None, Pattern=None): 
  2.     if isinstance(view, (list, tuple)): 
  3.         # For include(...) processing. 
  4.         pattern = Pattern(route, is_endpoint=False
  5.         urlconf_module, app_name, namespace = view 
  6.         return URLResolver( 
  7.             pattern, 
  8.             urlconf_module, 
  9.             kwargs, 
  10.             app_name=app_name, 
  11.             namespace=namespace, 
  12.         ) 
  13.     elif callable(view): 
  14.         pattern = Pattern(route, name=name, is_endpoint=True
  15.         return URLPattern(pattern, view, kwargs, name
  16.     else
  17.         raise TypeError('view must be a callable or a list/tuple in the case of include().'
  18.  
  19.  
  20. path = partial(_path, Pattern=RoutePattern) 
  21. re_path = partial(_path, Pattern=RegexPattern) 

path中有五个参数,两个必传参数route、view;两个可传参数kwargs、name;Pattern默认值是None

  • route:路线,也就是配置url路径,
  • view:视图函数,用于执行与正则匹配的url请求
  • kwargs:任意个关键字参数可以作为一个字典传递给目标视图函数
  • name:别名,为url路径取别名使用

Pattern默认值是None,体现在下面这段代码上:

  1. path = partial(_path, Pattern=RoutePattern) 

在这里就引入了一个高阶函数的概念,偏函数,举例子如下:

  1. print(int('11111', base=8)) 

把字符串转成8进制的整数类型,如遇到一次还可以这样操作,如遇到多个变量进行八进制的转换就每次都要写base=8,那如果是下面这样写会不会就舒服些呢?

设置固定默认值:

  1. def new_int(value, base=8):  
  2. return int(value, base) 

使用partial创建偏函数,简单理解就是固定住默认值,返回一个新的函数,从而能更简单地调用:

  1. from functools import partial  
  2. new_type = partial(int, base=8)  
  3. print(new_type('55555')) 

以上创建偏函数说的均是关键字传参,还有*args传参,您可自行百度搜索或可查看python官网文档。

官方文档地址:https://docs.python.org/zh-cn/3/library/functools.html

再返回观看Pattern所传的关键字是RoutePattern,而RoutePattern利用正则来专门查找url路径的等一系列方法。

path = partial() 就是创建一个偏函数,并返回一个新函数,新函数是保留原函数参数的,只是做了一个默认值绑定:

  1. path = partial(_path, Pattern=RoutePattern) 

有些时候可能你会有疑问,为什么有的会加include

  1. urlpatterns = [  
  2. path('hello/', include(hello.urls))  

官方描述:函数 include() 允许引用其它 URLconfs。每当 Django 遇到 :func:~django.urls.include 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。

实际就是根据你传的值再一次确认,是不是符合django要求的url配置

使用前要注意引包操作,不然会报:NameError: name 'include' is not defined

  1. from django.conf.urls import include 

创建好应用后,启动项目:python manage.py runserver

 

  1. (venv) apple:hello_django lifeng$ python manage.py runserver 
  2. Watching for file changes with StatReloader 
  3. Performing system checks... 
  4.  
  5. System check identified no issues (0 silenced). 
  6.  
  7. You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. 
  8. Run 'python manage.py migrate' to apply them. 
  9. April 04, 2021 - 13:58:13 
  10. Django version 3.1.7, using settings 'hello_django.settings' 
  11. Starting development server at http://127.0.0.1:8000/ 
  12. Quit the server with CONTROL-C. 

访问

http://127.0.0.1:8000/hello/

Django编写第一个应用视图

成功进入第一个页面。

以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,评论区留言会及时修正发布,谢谢!

原文地址:https://www.toutiao.com/a6947295829438923300/