基于django的視頻點播網站開發-step11-后臺用戶管理功能...

用戶管理功能,包含用戶添加、列表展示、編輯、刪除四大功能。下面我們一一揭曉。

用戶添加

我們先實現用戶添加功能,我們現在urls.py下添加相關的路由

path('user_add/', views.UserAddView.as_view(), name='user_add'),
path('user_list/', views.UserListView.as_view(), name='user_list'),
path('user_edit/<int:pk>',views.UserEditView.as_view(), name='user_edit'),
path('user_delete/', views.user_delete, name='user_delete'),

用戶添加的視圖類是UserAddView

class UserAddView(SuperUserRequiredMixin, generic.View):def get(self, request):form = UserAddForm()return render(self.request, 'myadmin/user_add.html', {'form': form})def post(self, request):form = UserAddForm(data=request.POST)if form.is_valid():user = form.save(commit=False)password = form.cleaned_data.get('password')user.set_password(password)user.save()return render(self.request, 'myadmin/user_add_success.html')return render(self.request, 'myadmin/user_add.html', {'form': form})

這是一個普通的視圖類,通過get()和post()來完成用戶添加的功能,get里面負責頁面的展示,post里面負責邏輯處理。在get中,初始化form為UserAddForm,因為添加的用戶是有類別的,所以我們在UserAddForm中應用了is_staff字段來表示管理員。在post中,我們通過user.set_password(password)來設置新密碼。user.save()來保存記錄到數據庫。保存成功后會跳轉到myadmin/user_add_success.html頁面。

用戶列表

用戶添加成功后,當你點擊用戶列表,即可看到用戶列表數據,用戶列表我們配置的路由是

path('user_list/', views.UserListView.as_view(), name='user_list'),

使用的是UserListView視圖類,該類是繼承自ListView通用視圖類的。因此 只需要我們簡單的配置幾下,就能實現列表功能。UserListView代碼如下

class UserListView(AdminUserRequiredMixin, generic.ListView):model = Usertemplate_name = 'myadmin/user_list.html'context_object_name = 'user_list'paginate_by = 10q = ''def get_context_data(self, *, object_list=None, **kwargs):context = super(UserListView, self).get_context_data(**kwargs)paginator = context.get('paginator')page = context.get('page_obj')page_list = get_page_list(paginator, page)context['page_list'] = page_listcontext['q'] = self.qreturn contextdef get_queryset(self):self.q = self.request.GET.get("q", "")return User.objects.filter(username__contains=self.q).order_by('-date_joined')

我們知道ListView是有多個回調函數的,這里就是通過get_context_data()和get_queryset()回調函數來實現列表中的功能的。在get_context_data()中實現了列表分頁功能,在get_queryset()中實現了搜索功能。

配置的模板是myadmin/user_list.html,顯示效果如下

用戶編輯

當你點擊編輯按鈕的時候,即可進入編輯頁面。對應的路由是

path('user_edit/<int:pk>',views.UserEditView.as_view(), name='user_edit'),

即UserEditView

class UserEditView(SuperUserRequiredMixin, generic.UpdateView):model = Userform_class = UserEditFormtemplate_name = 'myadmin/user_edit.html'def get_success_url(self):messages.success(self.request, "保存成功")return reverse('myadmin:user_edit', kwargs={'pk': self.kwargs['pk']})

同樣是繼承自UpdateView,僅需要配置好model、form_class、template_name即可,簡單至極。

效果如下

用戶刪除

當你點擊刪除按鈕的時候,會彈出確認框讓你刪除。然后網站通過ajax調用user_delete來實現真正的刪除操作,其中,ajax代碼位于static/js/myadmin/user_list.js

真正的刪除函數是user_delete,下面是它的真面目

@ajax_required
@require_http_methods(["POST"])
def user_delete(request): user_id = request.POST['user_id']instance = User.objects.get(id=user_id) instance.delete()return JsonResponse({"code": 0, "msg": "success"})

首先獲取到當前用戶的實例,然后通過 instance.delete() 刪除之。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252316.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BZOJ 1070 拆點 費用流

1070: [SCOI2007]修車 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 5860 Solved: 2487[Submit][Status][Discuss]Description 同一時刻有N位車主帶著他們的愛車來到了汽車維修中心。維修中心共有M位技術人員&#xff0c;不同的技術人員對不同 的車進行維修所用的時間是不…

分布式之數據庫和緩存雙寫一致性方案解析

先做一個說明&#xff0c;從理論上來說&#xff0c;給緩存設置過期時間&#xff0c;是保證最終一致性的解決方案。這種方案下&#xff0c;我們可以對存入緩存的數據設置過期時間&#xff0c;所有的寫操作以數據庫為準&#xff0c;對緩存操作只是盡最大努力即可。也就是說如果數…

使用python從csv文件中讀入兩列擬合直線

背景&#xff1a;要判斷跟蹤算法在控制目標物走直線的情況下跟蹤的軌跡是否為直線&#xff0c;我保存下來跟蹤算法跟蹤到的目標的中心點在圖像上的像素位置&#xff0c;然后擬合出穿過這些點的直線&#xff0c;然后計算這些點距離直線的平均距離來判斷跟蹤的精度。&#xff08;…

window document

1 打開一個新窗口 var newDocwindow.open("text/html","replace");var txt"<html><body>Learning about the DOM is FUN!</body></html>";newDoc.document.write(txt);newDoc.close(); //該方法將關閉 open() 方法打開…

‘(‘:illegal token on right side of ‘::‘

背景&#xff1a;想整理升級一下代碼&#xff0c;添加了兩個類&#xff0c;再一編譯代碼&#xff0c;出現了好多這樣的錯誤提示“(:illegal token on right side of ::”&#xff0c;我很納悶這是啥問題&#xff0c;我就使用“注釋法”來定位出錯的位置&#xff0c;我發現把所有…

mysql-數據庫操作

doc界面操作mysql:<br/> 以phpstudy為例 登錄數據庫&#xff1a;進入phpstudy/mysql/bin下&#xff0c;mysql -u用戶名 -p密碼 選擇數據庫&#xff1a;use 數據庫名; 設置編碼格式&#xff1a;set names gbk; 查看表結構或字段信息&#xff1a;desc 表名; 建立數據庫&…

虹軟免費人臉識別SDK注冊指南

2019獨角獸企業重金招聘Python工程師標準>>> 成為開發者三步完成賬號的基本注冊與認證&#xff1a; STEP1:點擊注冊虹軟AI開放平臺右上角注冊選項&#xff0c;完成注冊流程。 STEP2:首次使用&#xff0c;登錄后進入開發者中心&#xff0c;點擊賬號管理完成企業或者個…

Mybatis使用statementType=STATEMENT實現動態傳入表名或字段名

mybatis中使用statementType"STATEMENT"實現動態傳入字段名時一直報語句錯誤&#xff0c;但實際上語句并沒有毛病&#xff0c;爬了一天坑才找到問題&#xff0c;記錄一下。 整條語句中里所有傳入的值都要使用${xxx},不能使用#{xxx}。 <select id"listMap&quo…

C++中的類加多線程代碼修煉

背景&#xff1a;現在在做一個目標跟蹤的項目&#xff0c;需要實時的從工業相機中獲取圖像&#xff0c;然后再跟蹤圖像上的目標物&#xff0c;由于起初為了測試跟蹤算法&#xff0c;就把“從相機獲取圖像”和“跟蹤處理”都放在了主線程中&#xff0c;在實際測試時&#xff0c;…

Activity Monitor 閃退 無法進入睡眠

Activity Monitor 閃退 & 無法進入睡眠 情況描述 黑蘋果?主機突然無法進入睡眠。 考慮到可能是后臺程序阻礙了系統正常進入睡眠&#xff0c; 于是想要通過Activity Monitor查看系統的活動情況&#xff0c;然而&#xff0c;Activity Monitor閃退。 重新開機&#xff0c;快速…

hbase中清空整張表的數據

hbase(main):005:0> truncate fr:test Truncating FaceBase table (it may take a while):- Disabling table...- Dropping table...- Creating table...0 row(s) in 14.4220 seconds truncate是disable、drop、create三個動作的自動化集成。轉載于:https://www.cnblogs.com…

hibernate樹

1. 樹實現通過pid進行指向上一層來實現&#xff0c;實體類代碼如下 package com.test.model;import java.util.HashSet; import java.util.Set;import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.per…

Sleep() sleep() usleep()

Linux: sleep(n); //停留n秒 usleep(n); //停留n微秒 Windows: Sleep(n); //停留n毫秒

vue的鼠標移入和移出

vue的鼠標移入和移出 需求&#xff08;鼠標到預約二維碼顯示&#xff0c;預約添加背景色&#xff09; 實現 <!--html部分--> <ul class"person_list"> //五個li標簽皆是循環渲染出來的<li class"item" v-for"(n,index) in 5">…

聊聊flink的MemoryPool

為什么80%的碼農都做不了架構師&#xff1f;>>> 序 本文主要研究一下flink的MemoryPool MemoryPool flink-runtime_2.11-1.7.2-sources.jar!/org/apache/flink/runtime/memory/MemoryManager.java abstract static class MemoryPool {abstract int getNumberOfAvai…

day4

ti很簡單&#xff0c;但是把變量弄錯了&#xff0c;寫了不到半小時&#xff0c;調了一小時&#xff0c;導致t3功虧一簣。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> …

C++中public protected private的區別

1. 不考慮繼承關系時 本類方法使用外部使用private是否protected是否public是是 2. 有繼承關系時 子類方法使用外部private否否protected是否public是是 結論&#xff1a;基于以上兩個表格可以知道&#xff0c;C中的protected處于private和public中間&#xff0c; protected 既…

表達式求值

表達式求值問題 ①問題描述 表達式是數據運算的基本形式。人們的書寫習慣是中綴式&#xff0c;如&#xff1a;1122*(7-4)/3。中綴式的計算按運算符的優先級及括號優先的原則&#xff0c;相同級別從左到右進行計算。表達式還有后綴式&#xff08;如&#xff1a;22 7 4 - * 3 / 1…

PHP_SELF變量解析和重復路徑解決

最近升級PHP到PHP7版本&#xff0c;并重新部署了新的Nginx&#xff0c;啟動的時候發現了一個問題&#xff0c;全局變量$_SERVER[PHP_SELF]的值發生了改變&#xff0c;從而影響到代碼的功能。因此我們來了解下$_SERVER全局變量中的PHP_SELF/PATH_INFO/SCRIPT_NAME等參數以及其關…

pep 8 規范的一些記錄

一、pep8起源 龜叔創立Python的初衷里就有創立一個容易閱讀的編程語言&#xff0c;所以親自操刀寫了pep8 代碼規范&#xff0c;每個項目開始前都要有一個共識&#xff0c;就是自己的代碼規范&#xff0c;pep8 就是一個很好的范本。 二、官網鏈接 https://www.python.org/dev/pe…