最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django admin實現(xiàn)圖書管理系統(tǒng)菜鳥級教程完整實例

 更新時間:2017年12月12日 10:14:52   投稿:mengwei  
這篇文章主要介紹了Django admin實現(xiàn)圖書管理系統(tǒng)菜鳥級教程完整實例,具有一定借鑒價值,需要的朋友可以參考下。

Django 有著強大而又及其易用的admin后臺,在這里,你可以輕松實現(xiàn)復(fù)雜代碼實現(xiàn)的功能,如搜索,篩選,分頁,題目可編輯,多選框.

簡單到,一行代碼就可以實現(xiàn)一個功能,而且模塊之間耦合得相當完美.

不信,一起來看看吧!?用Django實現(xiàn)管理書籍的系統(tǒng),并能在前臺界面對書籍進行增刪查改,篩選,分頁,以及批量查詢修改功能.

準備工作

#準備好你的數(shù)據(jù)庫模型思維導(dǎo)圖

0.新建一個Django項目,起名為books,并且同時新建一個應(yīng)用book11

1.首先要設(shè)置models模塊,根據(jù)思維導(dǎo)圖,我們知道需要定義3張表,分別是Book,Author,Publisher.

1.1然而,django強大的地方在于,你無需在數(shù)據(jù)庫開辟一張表,ORM的模型,讓你只需要關(guān)注你要操作的對象.這里用類對象,來替代表,從而使得定義一張數(shù)據(jù)表Book,就只需要簡單的創(chuàng)建Book類對象,即可

#先設(shè)計作者Author對象(表)[models.py]
​
class Author(models.Model): #繼承于models.Model這個父類,從而實現(xiàn)多態(tài)
  first_name=models.CharField(max_length=32) #名字的字段,使用字符串格式,最大長度32
  last_name=models.CharField(max_length=32)
  email=models.EmailField()         #email字段,使用email自帶的格式
  def __unicode__(self):           #定義unicode函數(shù),是為了讓對象在實例化的時候,可以返回打印輸出它的名字<阿文>.不至于顯示為<** object>
    return "%s--%s"%(self.first_name,self.last_name)
#出版社
class Publisher(models.Model):
  name=models.CharField(max_length=64,unique=True) #出版社名稱,唯一,是主鍵
  address=models.CharField(max_length=64,unique=True)
  city=models.CharField(max_length=32)
  state_province=models.CharField(max_length=32)
  country=models.CharField(max_length=32)
  website=models.URLField()            #主頁,采用自帶的url格式
  def __unicode__(self):
    return "%s"%(self.name)
#定義一個選項,里面包含3個可選框,用以下面的書籍表publisher_state下拉選擇
STATUS_CHOICES=(
  ('checkout',u'已出版'),
  ('dai',u'待出版'),
  ('status',u'審核中'),
)
#書籍表
class Book(models.Model):
  name=models.CharField(max_length=64)  
  authors=models.ManyToManyField(Author) #作者,多對多的關(guān)系
  publisher=models.ForeignKey(Publisher) #出版社,外鍵管理到Publisher表
  publisher_date=models.DateField(auto_now_add=True)
  publisher_state=models.CharField(max_length=20,choices=STATUS_CHOICES,default='checkout') #出版狀態(tài),是一個可選框
  def __unicode__(self):
    return "%s--%s"%(self.name,self.publisher_date)

完整的代碼:

1.2然后,創(chuàng)建完models后,一定要創(chuàng)建映射文件,并且映射到數(shù)據(jù)庫,否則數(shù)據(jù)庫是不存在的

python manage.py makemigrations
python manage.py migrate

2.調(diào)試shell的models模塊,使用對象操作增刪查改

##進入shell 模式
python manage.py shell
##導(dǎo)入Publisher對象
from book11.models import Publisher
##查詢id=1的queryset賦值給p
p=Publisher.objects.get(id=1)
#對的對象進行操作,修改city="changsha",等價于[Publisher.objects.filter(id=1).update(city='changsha')]操作.
p.city='changsha'
#需要提交保存,否則不生效
p.save()

前后對比,操作數(shù)據(jù)庫字段就像操作對象一樣簡單!這便是ORM的優(yōu)勢

3.增加一個admin用戶

G:\git\web\books>python manage.py createsuperuser #增加一個超級用戶
Username (leave blank to use 'huan5'): admin #用戶名
Email address: admin@qq.com         #郵箱
Password:                  #輸8位密碼2次
Password (again):
Superuser created successfully.

4.編輯admin.py

4.1將models導(dǎo)入,并且注冊網(wǎng)站的Author,Publisher,Boos模塊

#設(shè)置默認編碼符
# -*- coding: utf-8 -*-
from book11 import models #導(dǎo)入數(shù)據(jù)庫
admin.site.register(models.Author)
admin.site.register(models.Publisher)
admin.site.register(models.Book)
#啟動服務(wù)
python manage.py runserver 0.0.0.0:8086
#并打開瀏覽器執(zhí)行
http://127.0.0.1:8086

書名已經(jīng)成功顯示出來

4.2配置一些擴展功能

from book11 import models
# 創(chuàng)建一個Bookadmin的modeladmin的子類
class Bookadmin(admin.ModelAdmin):
  list_display=('id','name','publisher','publisher_date','publisher_state')
  search_fields=('name',)
  list_filter=('publisher','publisher_date',)
  list_per_page=5
  list_editable=('name','publisher_state',)
  list_select_related=('publisher',)
  filter_horizontal=('authors',)
  raw_id_fields=('publisher',)
  actions=['set_publisher_checkout','set_publisher_dai','set_publisher_status','set_publisher_del',]
admin.site.register(models.Author,Authoradmin) #不要忘了把這些定義好的擴展寫進來
admin.site.register(models.Publisher,Publisheradmin)
admin.site.register(models.Book,Bookadmin)

#配置作者頁面的擴展內(nèi)容
class Authoradmin(admin.ModelAdmin):
  list_display=('first_name','last_name','email')

#配置出版社的擴展顯示
class Publisheradmin(admin.ModelAdmin):
  list_display = ('name','address','country',)

4.3為了批量操作,我們給他增加了actions,定義如下

  def set_publisher_checkout(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME) #選中傳入的表單中,勾選的checkbox對應(yīng)的id集合
    models.Book.objects.filter(id__in=selected).update(publisher_state='checkout') #將所有選中的id對象,修改出版狀態(tài)為checkout
  def set_publisher_dai(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).update(publisher_state='dai')
  def set_publisher_status(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).update(publisher_state='status')
  def set_publisher_del(modeladmin,request,queryset):    #########擴展部分,增加對選中的記錄今夕刪除!###########
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).delete()
​
  set_publisher_checkout.short_description="設(shè)置所有的書籍為--已出版"     #為了使界面更加友好,添加別名
  set_publisher_status.short_description="設(shè)置所有的書籍為--審核中"
  set_publisher_dai.short_description="設(shè)置所有的書籍為--待出版"
  set_publisher_del.short_description="設(shè)置所有的書籍為--刪除"

效果圖

調(diào)試成功

附上admin.py的全部代碼,方便調(diào)試不成功的小伙伴

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
​
from django.contrib import admin
from book11 import models
# Register your models here.
class Bookadmin(admin.ModelAdmin):
  list_display=('id','name','publisher','publisher_date','publisher_state')
  search_fields=('name',)
  list_filter=('publisher','publisher_date',)
  list_per_page=5
  list_editable=('name','publisher_state',)
  list_select_related=('publisher',)
  filter_horizontal=('authors',)
  raw_id_fields=('publisher',)
  actions=['set_publisher_checkout','set_publisher_dai','set_publisher_status','set_publisher_del',]
​
  def set_publisher_checkout(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).update(publisher_state='checkout')
  def set_publisher_dai(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).update(publisher_state='dai')
  def set_publisher_status(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).update(publisher_state='status')
  def set_publisher_del(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).delete()
​
  set_publisher_checkout.short_description="設(shè)置所有的書籍為--已出版"
  set_publisher_status.short_description="設(shè)置所有的書籍為--審核中"
  set_publisher_dai.short_description="設(shè)置所有的書籍為--待出版"
  set_publisher_del.short_description="設(shè)置所有的書籍為--刪除"
​
class Authoradmin(admin.ModelAdmin):
  list_display=('first_name','last_name','email')
​
class Publisheradmin(admin.ModelAdmin):
  list_display = ('name','address','country',)
​
admin.site.register(models.Author,Authoradmin)
admin.site.register(models.Publisher,Publisheradmin)
admin.site.register(models.Book,Bookadmin)

不禁感嘆再也沒有比django更加簡單好用,容易操作的后臺了.

總結(jié)

Django真的太強大。。

以上就是本文關(guān)于Django admin實現(xiàn)圖書管理系統(tǒng)菜鳥級教程完整實例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

django實現(xiàn)用戶登陸功能詳解

Python通過Django實現(xiàn)用戶注冊和郵箱驗證功能代碼

Python編程django實現(xiàn)同一個ip十分鐘內(nèi)只能注冊一次

如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加簽驗簽

    Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加簽驗簽

    這篇文章主要介紹了Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加簽驗簽,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2019-12-12
  • Pytes正確的配置使用日志功能

    Pytes正確的配置使用日志功能

    在pytest自動化測試中,如果只是簡單的從應(yīng)用的角度來說,完全可以不去了解pytest中的顯示信息的部分以及原理,可以通過使用推薦的pytest.ini配置,從而可以做到相對來說比較通用的日志配置,這篇文章主要介紹了Pytes如何正確的配置使用日志功能,需要的朋友可以參考下
    2022-12-12
  • pycharm新建一個python工程步驟

    pycharm新建一個python工程步驟

    在本文里小編給讀者們分享一篇關(guān)于pycharm怎么新建一個python工程的知識點和步驟內(nèi)容,需要的朋友們學習下。
    2019-07-07
  • Python中異常重試的解決方案詳解

    Python中異常重試的解決方案詳解

    這篇文章主要給大家介紹了在Python中異常重試的解決方案,文中介紹的非常詳細,相信對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面隨著小編一起來看看吧。
    2017-05-05
  • Python3中_(下劃線)和__(雙下劃線)的用途和區(qū)別

    Python3中_(下劃線)和__(雙下劃線)的用途和區(qū)別

    經(jīng)常會看到以下劃線或者雙下劃線開頭的方法或者屬性,到底它們有什么作用,又有什么樣的區(qū)別呢?今天我們來總結(jié)一下,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 詳解Python是如何處理不同時區(qū)的

    詳解Python是如何處理不同時區(qū)的

    時區(qū)是指在地球上不同地方的時間差異,地球分為?24?個時區(qū),每個時區(qū)都相對于格林威治標準時間或協(xié)調(diào)世界時(UTC)有所偏移。本文主要和大家來聊聊Python是如何處理不同時區(qū)的,希望對大家有所幫助
    2023-02-02
  • Pandas.DataFrame的行名和列名的修改

    Pandas.DataFrame的行名和列名的修改

    本文主要介紹了Pandas.DataFrame的行名和列名的修改,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Python mplfinance庫繪制金融圖表實現(xiàn)數(shù)據(jù)可視化實例探究

    Python mplfinance庫繪制金融圖表實現(xiàn)數(shù)據(jù)可視化實例探究

    mplfinance(Matplotlib Finance),它是基于Matplotlib的庫,專門用于創(chuàng)建金融圖表和交互式金融數(shù)據(jù)可視化,本文將深入介紹?mplfinance,包括其基本概念、功能特性以及如何使用示例代碼創(chuàng)建各種金融圖表
    2024-01-01
  • ITK 實現(xiàn)多張圖像轉(zhuǎn)成單個nii.gz或mha文件案例

    ITK 實現(xiàn)多張圖像轉(zhuǎn)成單個nii.gz或mha文件案例

    這篇文章主要介紹了ITK 實現(xiàn)多張圖像轉(zhuǎn)成單個nii.gz或mha文件案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python類的多重繼承問題深入分析

    Python類的多重繼承問題深入分析

    昨天在Python類的多重繼承那里糾結(jié)了好久,咨詢了不少高手之后,才完全搞明白,現(xiàn)在把類的特性整理下,供以后參考,也給有需要的小伙伴們參考下
    2014-11-11

最新評論

延安市| 临夏县| 瓮安县| 晋中市| 云安县| 青川县| 莒南县| 京山县| 泌阳县| 廊坊市| 武功县| 龙南县| 丹棱县| 富顺县| 剑川县| 独山县| 通道| 夹江县| 吕梁市| 商丘市| 工布江达县| 长丰县| 乡城县| 堆龙德庆县| 正安县| 伊宁市| 陆川县| 山西省| 北票市| 五大连池市| 东城区| 东乌珠穆沁旗| 庆城县| 宁乡县| 西安市| 库车县| 敦化市| 汾西县| 乌拉特中旗| 乐山市| 平舆县|