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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django后台项目之用户管理功能开发流程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

項(xiàng)目功能開(kāi)發(fā)流程

1 先寫(xiě)列表頁(yè)(加載出來(lái)數(shù)據(jù)就行)

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

2 寫(xiě)添加功能

2.1 創(chuàng)建addOrDoadd視圖方法

2.2 添加訪問(wèn)addOrDoadd的路由

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

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

2.4 構(gòu)建視圖邏輯

2.4.1 判斷請(qǐng)求方法

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

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

3 寫(xiě)修改功能

3.1.創(chuàng)建editOrDoedit的視圖函數(shù)

3.2 在子路由中添加訪問(wèn)editOrDoedit的路徑

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

3.4 把a(bǔ)dd.html復(fù)制一份名稱修改成edit.html

3.5 構(gòu)建視圖邏輯

3.5.1 判斷請(qǐng)求方法

  • 如果為get就加載模板
  • 如果為post就處理數(shù)據(jù)
    • 根據(jù)傳過(guò)來(lái)id查詢信息
    • 發(fā)送至模板,展示在html的表單中

3.5.2 處理邏輯

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

4 寫(xiě)刪除

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

4.2 創(chuàng)建user_del的視圖函數(shù)

4.3 創(chuàng)建可以訪問(wèn)user_del的路徑

4.4 構(gòu)建視圖函數(shù)的邏輯

  • 接受參數(shù)
  • 構(gòu)建修改數(shù)據(jù)
  • 拋異常,實(shí)例化對(duì)象
  • 保存操作
  • 返回提示信息

5 完善index.html當(dāng)中表格中的select修改狀態(tài)(使用ajax技術(shù))

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

5.2 在本頁(yè)面代碼的最后一個(gè){% endblock %}之前構(gòu)建js程序

<script></script>

5.3 在script標(biāo)簽中構(gòu)建select的change(下拉框改變事件)事件,并且獲取到狀態(tài)的值和

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

5.4 在change事件中構(gòu)建ajax請(qǐng)求

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

5.5 構(gòu)建視圖函數(shù)邏輯

  • 引入JsonResponse方法
  • 接受ajax傳過(guò)來(lái)的參數(shù)
  • 實(shí)例化對(duì)象
  • 構(gòu)建修改數(shù)據(jù)
  • 拋異常,保存操作
  • 返回提示信息
return JsonResponse({'msg':'修改成功!'})

5.6 在第4步中的ajax請(qǐng)求的function函數(shù)中彈出返回的信息

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的視圖函數(shù)(整個(gè)開(kāi)發(fā)步驟的第一步)中完善邏輯

# 接受查詢的參數(shù)user_type = request.GET.get('type',None)keywords = request.GET.get('keywords',None)# 導(dǎo)入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 在本功能的第一步中完善默認(rèn)值

完善index視圖函數(shù),把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 %}>狀態(tài)</option><option value="price" {% if type == 'price' %}selected{% endif %}>資產(chǎn)</option> </select> <input type="text" class="am-form-field " placeholder="可以組合搜索" name="keywords" {% if keywords %}value="{{ keywords }}"{% endif %}>

注:以上if中間的內(nèi)容為補(bǔ)全內(nèi)容

7 完善優(yōu)化分頁(yè)

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

7.2 在templatetags文件夾中創(chuàng)建pagetag.py

7.3 填寫(xiě)pagetag.py中的內(nèi)容

from django import templatefrom django.utils.html import format_htmlregister = template.Library()@register.simple_tag# 定義分頁(yè)優(yōu)化的函數(shù)def PageShow(count,request):# count 是總頁(yè)數(shù)# request 請(qǐng)求對(duì)象# count = int(count)# p接收當(dāng)前的頁(yè)碼數(shù)p = int(request.GET.get('page',1))# 獲取url中的所有參數(shù)data = request.GET.dict()print(count,type(count))args = ''for k,v in data.items():if k != 'page':args += '&'+k+'='+v# 開(kāi)始start = p-5# 結(jié)束end = p+4# 判斷當(dāng)前頁(yè)是否小于5if p <= 5:start = 1end = 10# 判斷當(dāng)前頁(yè)大于總頁(yè)數(shù)if p > count-5:start = count-5end = count# 判斷總頁(yè)數(shù)小于10if count < 10:start = 1end = countpageHtml = ''# 首頁(yè)pageHtml += '<li><a href="?page=1{args}">首頁(yè)</a></li>'.format(args=args)# 上一頁(yè)if p>1:pageHtml += '<li><a href="?page={p}{args}">上一頁(yè)</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)# 下一頁(yè)if p<count:pageHtml += '<li><a href="?page={p}{args}">下一頁(yè)</a></li>'.format(p=p+1,args=args)# 尾頁(yè)pageHtml += '<li><a href="?page={p}{args}">尾頁(yè)</a></li>'.format(p=count,args=args)return format_html(pageHtml)

7.4 在index的視圖函數(shù)(整個(gè)開(kāi)發(fā)步驟的第一步)中完善邏輯

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

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

7.6 修改index.html頁(yè)面中的分頁(yè)內(nèi)容

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

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

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。