首页 > 其他分享 >django框架-04

django框架-04

时间:2022-09-01 21:55:22浏览次数:54  
标签:04 框架 views django path id 路由 页面

目录

用户信息编辑

用户管理系统(单表)
 1.配置文件
 2.模型类
 3.页面搭建
 4.数据添加的逻辑
 5.数据编辑的逻辑
 6.数据删除的逻辑

 1.展示用户信息数据

   步骤一:创建django项目并创建app 创建static静态文件夹
         在配置文件中操作:
              修改templates文件夹路径'DIRS':(os.path.join(BASE_DIR,'templates'))
          	  注释掉'django.middleware.csrf.CsrfViewMiddleware',
              添加satatic文件夹路径STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
              添加mysql信息:
                 DATABASES:{
                     'default':{
                         'ENGINE':'django.db.backends.mysql',
                         'NAME':'day57'
                         'USER':'root'
                         'PASSWORDd':'1234',
                         'CHARSET':'utf8'
                         'HOST':'127.0.0.1'
                         'PORT':3306
                     }
                 }
           mysql创建库
           在pycharm中在models.py中创建表(orm语法) 之后添加一些数据信息
    步骤二:创建hteml用户信息展示页面
            在urls.py文件中做(路由匹配)网址后缀与函数的对应 path('user_info/', views.user_info),
            在views.py文件夹中定义函数 返回数据html页面
    步骤三:在html文件中进行页面格式、新增、修改及删除按钮设置(用a标签)
            表格标签创建及样式设置(用到表格标签table/theard/tbody/tr/th/td)
            在td表格数据中进行for循环 然后用对象点字段名的方式获取数据信息 展示到前端页面
    步骤四:查询到数据信息  
            def user_info(request):
                list_info = models.Info.objects.filter()
            得到的是数据对象<QuerySet [<Info: Info object (2)>, <Info: Info object (3)>]>
            将数据返回到html页面 return render(request, 'info.html', locals())

 2.新增数据:

    步骤一:创建新增数据的html文件 
            在urls.py文件中做(路由匹配)网址后缀与函数的对应 path('add_info/', views.add_info),
            在views.py文件中定义函数 返回添加数据html页面
    步骤二:在html文件form表单中修改请求类型(method="POST")
            数据展示页面中通过input标签设置用户输入页面及样式设置
            在input标签中一定要添加name属性 以及创建提交按钮 
    步骤三:在views.py数据新增函数中判断用户提交的请求类型(if request.method == 'POST':)
            通过request对象方法获取用户输入的数据(name = request.POST.get('username'))
            通过orm操作数据增加(models.Info.objects.create(name=name, age=age))
            通过重定向切换到数据展示页面

 3.修改数据:

    步骤一:创建新增数据的html文件 
            在urls.py文件中做(路由匹配)网址后缀与函数的对应(path('update_info/', views.update_info))
            在views.py文件中定义函数 返回添加数据到html页面
    步骤二:展示数据html文件中在修改标签按钮中(a标签)通过网址后缀名后添加(href="/del_info/?id={{ userinfo.id }}")  最后面不加/
            获取用户想要修改的数据id
    步骤三:在html文件form表单中修改请求类型(method="POST")
            数据展示页面中通过input标签设置用户输入页面及样式设置
            在input标签中一定要添加name属性
            以及values属性在修改页面展示数据(value="{{ user_obj.name }") 及创建提交按钮 
    步骤四:在views.py数据新增函数中获得用户修改的数据id(user_id = request.GET.get('id'))
            在views.py数据新增函数中判断用户提交的请求类型(if request.method == 'POST':)
            根据id数据获得用户信息数据(name = request.POST.get('username'))
		   通过orm操作数据修改(odels.Info.objects.filter(id=user_id).update(name=name, age=age))
    	   通过重定向切换到数据展示页面

 4.删除数据:

  步骤一:在urls.py文件中做(路由匹配)网址后缀与函数的对应(path('del_info/', views.del_info))
         在views.py文件中定义函数 返回添加数据到html页面
  步骤二:展示数据html文件中在修改标签按钮中(a标签)通过网址后缀名后添加(href="/del_info/?id={{ userinfo.id }}")
  步骤三:获得用户需要删除的id(user_id = request.GET.get('id'))
         通过orm操作数据删除(models.Info.objects.filter(id=user_id).delete())
         通过重定向切换到数据展示页面

django请求生命周期流程图

1.图层:
  路由层
  视图层
  模板层
  模型层
  django插件
  django中间件

image

django路由匹配

 1.路由匹配:path('网址后缀',函数名) 网址后缀一旦匹配上就会自动执行后面的函数 并结束整个路由匹配
 2.路由结尾的斜杠情况种类:
  2.1 默认情况下不写斜杠 django会做二  第一次匹配不上会让浏览器加斜杆后再次请求
 注:django配置文件中可以指定是否自动添加斜杠 一般不用更改
  APPEND_SLASH = False
 3.转换器:

  3.1 path转换器:当网址后缀不固定的时候 可以使用转换器来匹配
  	3.1.1 类型:
    	'int':IntConverter(),
    	'path':PathCoverter(),
    	'slug':SlugCoverter(),
    	'str':StringCoverter(),
    	'uuid':UUIDCoverter(),
   3.1.2 路由匹配
     	 path('func/<int:year>/<str:info>/',views.func)   路由匹配(网址后缀不固定)
   3.1.3 应用:转换器会将匹配到的内容当做视图函数的关键字传入 转换器与视图函数的参数必须一一对应 并结束整个路由的匹配
      	path('func/<int:year>/<str:info>/',views.func)
      	def func(request,year,info):
            pass
 3.2.re_path正则匹配
     3.2.1 正则匹配
    		re_path('^text/$',views.text)
           应用:转换器会将匹配到的内容当做视图函数的关键字传入 转换器与视图函数的参数必须一一对应 并结束整个路由的匹配
     3.2.2 正则匹配之无名分组:
           re_path('^text/(\d+)/(?P<others>.*?)/',views.text)
           应用:正则表达式匹配到的内容会当做视图的位置参数传递给视图函数
     3.2.3 正则匹配之有名分组:
           re_path('^text/(?P<year>\d+)/(?P<other>.*?)/',views.text)

 4.django版本区别:
  django1.11中 只支持正则匹配 方法 url()
  django2、3、4中 path() re_path()==1.11中的url()

反向解析

反向解析

 1.原因:很多时候都提前将页面的路由写死了 一旦路由发送变化会导致所有相关页面的连接失效 因此需要反向解析
 2.反向解析:返回一个结果 该结果可以访问到对应的路由
 3.路由的对应关系起别名:
path('register/',views.reg,name='reg_view')
 4.使用反向解析的语法:

  html页面:
          {% url 'reg_view' %}
  后端:
          from django.shortcuts import reverse
          reverse('reg_view')
  注:反向解析不同转换器方法一样(path()、re_path()、ulr())

有名无名反向解析

 1、原因:当路由中有不确定的匹配因素 反向解析的时候需要人为给出一个具体的值
 2.语法:

  path('reg/<str:info>/', views.reg, name='reg_view')
  reverse('reg_view', args=('lili',))
  {% url 'reg_view' 'lili' %}
  注:有名无名反向解析不同转换器方法一样(path()、re_path()、ulr())

路由分发

 1.原因:总路由及静态文件与templates文件夹负责django中所有应用的的数据的话 整体数据比较混乱且数据量大 因此django中的应用可以有自己独立的urls.py templates文件夹 static文件夹
 2.优点:能够让基于django开发的多个应用完全独立 便于小组开发
 3.总路由:
  path('app01/',include('app01.urls')).
  path('app02/',include('app02.urls'))
 子路由:
  path('after/',views.after) # app01
  path('after/',views.after) # app02
 注:当项目特别大时 可以使用路由分发

名称空间

 1.原因:有路由分发场景下多个应用在涉及到反向解析别名冲突的时候无法正常解析
 2.解决方式:

  方式一:名称空间 namespace
          path('app01/', include(('app01.urls', app01),namespance='app01'))
          path('app02/', include(('app02.urls', app01),namespance='app02'))
  方式二:别名不冲突(在别名前加应用名)
       

标签:04,框架,views,django,path,id,路由,页面
From: https://www.cnblogs.com/040714zq/p/16647937.html

相关文章

  • Django之路由层
    django请求周期生命流程图django的生命周期是从用户发送HTTP请求数据到网站响应的过程。整个过程的流程包括:浏览器发送HTTP请求——>wsgiref服务——>中间件—......
  • django3/路由层小知识
    Django请求声明周期流程图路由匹配反向解析无名有名反向解析路由分发名称空间django请求生命周期流程图浏览器默认基于HTTP协议访问web服务网关接口(WebServerGa......
  • Django请求生命周期与反向解析
    Django请求生命周期与反向解析Django请求生命周期流程图Django路由匹配(多版本)1.路由 path('网址后缀',函数名(类名)) 一旦网址后缀匹配上了就会自动执行后面的函数......
  • unplugin-auto-import自动导入TS2304警告问题
    https://blog.csdn.net/qq_35317490/article/details/123525657?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-......
  • paper - 2004 - self intersection removal in triangular mesh offseting
    paper-2004-selfintersectionremovalintriangularmeshoffsetingJungW,ShinH,ChoiBK.Self-intersectionremovalintriangularmeshoffsetting[J].Com......
  • ubuntu 16.04 vs code中调试ORB-SLAM3
    如果是在vscode中编译,在vscode中调试,那么执行如下,如果还是在终端中编译,只在vscode中调试,那么应该可以忽略(1-3)注意修改build.sh文件中最下面的DCMAKE_BUILD_TYPE为Deb......
  • 单片机串口命令处理框架
    串口中断voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){CmdAnalyze();//命令分析if(cmd==cmd_event1)event1=true;elseif(cm......
  • Go ORM框架ent快速上手
    https://entgo.io/docs/getting-startedhttps://github.com/ent/entent是一款facebook开源的go语言ORM框架,类似于gorm等用于实现数据库对象映射和操作的框架。ent的不同......
  • Java接口自动化测试框架系列(二)表格设计与数据读取
    一、测试系统分析不同系统有不同的接口,通过分析这些接口,提取共同点可以得到不同地区的系统共有的接口。如:登录、登出、用户信息完善等接口二、表格设计  不同列......
  • idea web项目运行报错404
    背景运行springMVC时报错404,源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示,index.jsp可以进入,但是其他页面无法进入。原因用百度上的方法都无法......