日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django后台项目之用户管理功能开发流程

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django后台项目之用户管理功能开发流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目功能開發流程

1 先寫列表頁(加載出來數據就行)

ob = User_vip.objects.filter(is_del='004001').order_by('-cts')

2 寫添加功能

2.1 創建addOrDoadd視圖方法

2.2 添加訪問addOrDoadd的路由

2.3 在index.html頁面吧添加的按鈕的鏈接不全

<a style="color:#fff;" href="{% url 'myadmin/user/add' %}"><span class="am-icon-plus"></span>新增 </a>

2.4 構建視圖邏輯

2.4.1 判斷請求方法

如果是get就加載模板,如果是post就處理邏輯

2.4.2 處理邏輯
  • 接受參數(data = request.POST.dict())
  • 刪除csrf(data.pop('csrfmiddlewaretoken'))
  • 驗證所有信息是否添加規范
  • 驗證添加的信息是否重復
  • 拋異常,調用模型執行添加操作
  • 保存操作
  • 返回提示信息

3 寫修改功能

3.1.創建editOrDoedit的視圖函數

3.2 在子路由中添加訪問editOrDoedit的路徑

3.3 在index.html中修改的鏈接不全

3.4 把add.html復制一份名稱修改成edit.html

3.5 構建視圖邏輯

3.5.1 判斷請求方法

  • 如果為get就加載模板
  • 如果為post就處理數據
    • 根據傳過來id查詢信息
    • 發送至模板,展示在html的表單中

3.5.2 處理邏輯

  • 接收參數
  • 接受id
  • 刪除csrf
  • 驗證所有信息
  • 驗證修改是否重復(注意:要去除自身)
num = User_vip.objects.filter(nick_name=data['nick_name'],\ is_del="004001").exclude(id=data['uid']).count()
  • 構建修改數據
  • 拋異常,實例化對象
  • 保存操作
  • 返回提示信息

4 寫刪除

4.1 修改index.html的刪除按鈕的路徑

4.2 創建user_del的視圖函數

4.3 創建可以訪問user_del的路徑

4.4 構建視圖函數的邏輯

  • 接受參數
  • 構建修改數據
  • 拋異常,實例化對象
  • 保存操作
  • 返回提示信息

5 完善index.html當中表格中的select修改狀態(使用ajax技術)

5.1 給select添加class=“sel_status"和uid=”{{ v.id }}"

5.2 在本頁面代碼的最后一個{% endblock %}之前構建js程序

<script></script>

5.3 在script標簽中構建select的change(下拉框改變事件)事件,并且獲取到狀態的值和

id{$(.sel_status).change(function(){// 獲取狀態的值var status = $(this).val() // 獲取idvar uid = $(this).attr('uid')}) }

5.4 在change事件中構建ajax請求

// 構建ajax$.get('{% url 'myadmin/user/edit_status' %}',{'uid':uid,'status':status},function(data){},'json')1

5.5 構建視圖函數邏輯

  • 引入JsonResponse方法
  • 接受ajax傳過來的參數
  • 實例化對象
  • 構建修改數據
  • 拋異常,保存操作
  • 返回提示信息
return JsonResponse({'msg':'修改成功!'})

5.6 在第4步中的ajax請求的function函數中彈出返回的信息

alert(data.msg)

6 完善index.html中的組合搜索

6.1 修改select和input提交的名稱

  • <select data-am-selected="{btnSize: 'sm'}" style="display: none;" name="type">
  • <input type="text" class="am-form-field " placeholder="可以組合搜索" name="keywords">
  • 把button按鈕中的type="button"刪掉
  • 在第1步,和第2步的最外面添加form表單,并且提交地址為myadmin/user/list
<form action="{% url 'myadmin/user/list' %}"></form>

6.2 在index的視圖函數(整個開發步驟的第一步)中完善邏輯

# 接受查詢的參數user_type = request.GET.get('type',None)keywords = request.GET.get('keywords',None)# 導入Q方法from django.db.models import Qif user_type:if user_type == 'all':if keywords:# SELECT * FROM User_vip WHERE LIKE (nick_name '%keywords%',age '%keywords%')ob = ob.filter(Q(nick_name__contains=keywords)|Q(age__contains=keywords)|Q(sex__contains=keywords)|Q(email__contains=keywords)|Q(phone__contains=keywords)|Q(intergral__contains=keywords)|Q(status__contains=keywords)|Q(price__contains=keywords))else:search = {user_type+'__contains':keywords}ob = ob.filter(**search)

6.3 在本功能的第一步中完善默認值

完善index視圖函數,把type和keywords傳遞到模板中

<select data-am-selected="{btnSize: 'sm'}" style="display: none;" name="type"><option value="all" {% if type == 'all' %}selected{% endif %}>所有類別</option><option value="nick_name" {% if type == 'nick_name' %}selected{% endif %}>昵稱</option><option value="age" {% if type == 'age' %}selected{% endif %}>年齡</option><option value="sex" {% if type == 'sex' %}selected{% endif %}>性別</option><option value="email" {% if type == 'email' %}selected{% endif %}>郵箱</option><option value="phone" {% if type == 'phone' %}selected{% endif %}>電話</option><option value="intergral" {% if type == 'intergral' %}selected{% endif %}>積分</option><option value="status" {% if type == 'status' %}selected{% endif %}>狀態</option><option value="price" {% if type == 'price' %}selected{% endif %}>資產</option> </select> <input type="text" class="am-form-field " placeholder="可以組合搜索" name="keywords" {% if keywords %}value="{{ keywords }}"{% endif %}>

注:以上if中間的內容為補全內容

7 完善優化分頁

7.1 在views文件夾的同級目錄中創建templatetags的文件夾(文件夾名稱只能是templatetags)

7.2 在templatetags文件夾中創建pagetag.py

7.3 填寫pagetag.py中的內容

from django import templatefrom django.utils.html import format_htmlregister = template.Library()@register.simple_tag# 定義分頁優化的函數def PageShow(count,request):# count 是總頁數# request 請求對象# count = int(count)# p接收當前的頁碼數p = int(request.GET.get('page',1))# 獲取url中的所有參數data = request.GET.dict()print(count,type(count))args = ''for k,v in data.items():if k != 'page':args += '&'+k+'='+v# 開始start = p-5# 結束end = p+4# 判斷當前頁是否小于5if p <= 5:start = 1end = 10# 判斷當前頁大于總頁數if p > count-5:start = count-5end = count# 判斷總頁數小于10if count < 10:start = 1end = countpageHtml = ''# 首頁pageHtml += '<li><a href="?page=1{args}">首頁</a></li>'.format(args=args)# 上一頁if p>1:pageHtml += '<li><a href="?page={p}{args}">上一頁</a></li>'.format(p=p-1,args=args)for x in range(start,end+1):if p == x:pageHtml += '<li class="am-active"><a href="?page={p}{args}">{p}</a></li>'.format(p=x,args=args)else:pageHtml += '<li><a href="?page={p}{args}">{p}</a></li>'.format(p=x,args=args)# 下一頁if p<count:pageHtml += '<li><a href="?page={p}{args}">下一頁</a></li>'.format(p=p+1,args=args)# 尾頁pageHtml += '<li><a href="?page={p}{args}">尾頁</a></li>'.format(p=count,args=args)return format_html(pageHtml)

7.4 在index的視圖函數(整個開發步驟的第一步)中完善邏輯

# 導入分頁類from django.core.paginator import Paginator# 實例化分頁類p = Paginator(ob,5)# 獲取當前的頁碼數pageindex = request.GET.get('page',1)# 獲取當前頁的數據userlist = p.page(pageindex)# 獲取所有頁碼# pages = p.page_range# 獲取總頁數pages = p.num_pages

7.5 把第4步pages傳遞到模板中

7.6 修改index.html頁面中的分頁內容

{% load pagetag %}{% PageShow page request %}

作者:秋葉夏風
出處:https://blog.csdn.net/qq_40223983
本文版權歸作者和CSDN博客共有。歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接!

總結

以上是生活随笔為你收集整理的Django后台项目之用户管理功能开发流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。