Django后台项目之用户管理功能开发流程
生活随笔
收集整理的這篇文章主要介紹了
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ù)(注意:要去除自身)
- 構(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')15.5 構(gòu)建視圖函數(shù)邏輯
- 引入JsonResponse方法
- 接受ajax傳過(guò)來(lái)的參數(shù)
- 實(shí)例化對(duì)象
- 構(gòu)建修改數(shù)據(jù)
- 拋異常,保存操作
- 返回提示信息
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
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_pages7.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)題。
- 上一篇: 【智慧城市】GIS数据获取-获取道路/水
- 下一篇: 【日常小问题3】win10电脑忘记开机密