成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python大佬養(yǎng)成計劃----Django圖書人物適配系統(tǒng)(后臺)

lufficc / 2251人閱讀

摘要:是重量級選手中最有代表性的一位。是一個開放源代碼的應(yīng)用框架,由寫成。使用用戶登陸后臺管理時,將只有增加組的選項。人物屬性姓名,性別,簡介,所屬書籍。

Django

Python下有許多款不同的 Web 框架。Django是重量級選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。
Django是一個開放源代碼的Web應(yīng)用框架,由Python寫成。

Django基礎(chǔ)

版本:Django 1.10
使用Pycharm創(chuàng)建新項目Django,命名為FirstDjango
有FirstDjango目錄,templates目錄,manage.py文件
運(yùn)行manage.py文件類似flask_script命令行

 python manage.py makemigrations   #相當(dāng)于初始化數(shù)據(jù)庫表
 python manage.py migrate #相當(dāng)于數(shù)據(jù)庫遷移命令,這里的數(shù)據(jù)庫存儲都是放在db.sqlite3文件里
 python manage.py createsuperuser #創(chuàng)建超級用戶,生成db.sqlite3文件
 python manage.py runserver 7899 #默認(rèn)端口號:8000

訪問http://127.0.0.1:7899/,可以看見It worked頁面,但還沒有真正的運(yùn)行APP

修改語言,時區(qū)(setting.py)

# LANGUAGE_CODE = "en-us"
LANGUAGE_CODE = "zh-hans"

# TIME_ZONE = "UTC"
TIME_ZONE = "Asia/Shanghai"

Django不同于flask,不需要在每次修改代碼時,重啟程序。

http://127.0.0.1:7899/admin/,可以訪問到后臺管理
這里可以添加新用戶和新的組,新的用戶、組可以被分配權(quán)力,但不能執(zhí)行超級用戶的分發(fā)權(quán)限的功能
示例:給add_group組添加‘Can add group ’
創(chuàng)建用戶normal,隸屬add_group組,勾選職員狀態(tài)(指明用戶是否可以登錄到這個管理站點(diǎn))。
使用normal用戶登陸后臺管理時,將只有增加組的選項。

創(chuàng)建自己的應(yīng)用(app) -- book

terminal輸入

python manage.py startapp book

會在當(dāng)前項目里生成book/目錄

創(chuàng)建好自己的應(yīng)用文件后,首先在項目里注冊應(yīng)用setting.py

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "book",
]

開始寫數(shù)據(jù)庫結(jié)構(gòu)(model.py)

首先確定數(shù)據(jù)庫表有哪些:書籍、人物。
然后確定每個表的結(jié)構(gòu),書籍的屬性有:id,標(biāo)題,出版時間,摘要,封面。人物屬性:id,姓名,性別,簡介,所屬書籍。
最后確定表之間的關(guān)系:一個書籍里面有多個人物,人物數(shù)據(jù)庫表寫外鍵

在django框架結(jié)構(gòu)里,不需要像flask寫反向引用

# book/models.py
from django.db import models

# Create your models here.
class BookInfo(models.Model):
    # 這里不需要寫id,Django框架默認(rèn)會生成id,并作為主鍵pk
    btitle = models.CharField(max_length=100,unique=True,verbose_name="書籍標(biāo)題")     # 表示在后臺管理中這一欄的中文顯示
    bpub_time  = models.DateField(verbose_name="出版時間")
    # bcontent = models.TextField(default="摘要",verbose_name="書籍摘要")
    # bimg = models.ImageField(default=None,upload_to="static/uploads/")
    class Meta:    ##表示這個數(shù)據(jù)庫表在后臺中的中文顯示,因為英語區(qū)分單復(fù)數(shù),所以需要寫上單復(fù)數(shù)的中文顯示
        verbose_name = "書籍信息"
        verbose_name_plural = "書籍信息"
    def __str__(self):
        return "%s" %(self.btitle)

class HeroInfo(models.Model):
    hname = models.CharField(max_length=50,verbose_name="人物姓名")
    hgender = models.BooleanField(default=True,verbose_name="人物性別")
    # 任務(wù)簡介
    hcontent = models.TextField(verbose_name="人物簡介")
    # 多的一端寫外鍵
    hbook = models.ForeignKey(BookInfo,verbose_name="所屬書籍")
    @property
    def gender(self):
        if self.hgender:
            return "男"
        else:
            return "女"
    class Meta:
        verbose_name = "人物信息"
        verbose_name_plural = "人物信息"
    def __str__(self):
        return "%s" %(self.hname)
使用sqlite3文件類型數(shù)據(jù)庫

Django默認(rèn)使用sqlit3數(shù)據(jù)庫,可在項目的setting.py文件中查看

DATABASES = {
    "default": {
         "ENGINE": "django.db.backends.sqlite3",
         "NAME": os.path.join(BASE_DIR, "db.sqlite3"),
     }
}

寫好應(yīng)用book的models.py文件后,我們開始創(chuàng)建數(shù)據(jù)庫

python manage.py makemigrations   
python manage.py migrate 

如何進(jìn)入sqlite3數(shù)據(jù)庫表

python manage.py shell    #打開類似數(shù)據(jù)庫交互命令的窗口
1. 數(shù)據(jù)庫的增添數(shù)據(jù)
>>> from book.models import BookInfo,HeroInfo
>>> from datetime import date
>>> book1 = BookInfo(btitle="小王子",bpub_time=date(1942,5,13))
>>> book1.save()
2. 數(shù)據(jù)庫的查找
>>> BookInfo.objects.all()
]>

根據(jù)指定信息查找

>>> book = BookInfo.objects.get(id=1)
>>> book.btitle
"小王子"
3.數(shù)據(jù)庫數(shù)據(jù)的修改
>>> book1.btitle = "安徒生童話"
>>> book1.save()
>>> book = BookInfo.objects.get(id=1)
>>> book.btitle
"安徒生童話"
4. 數(shù)據(jù)庫數(shù)據(jù)的刪除
>>> book = BookInfo.objects.get(id=1)
>>> book.delete()
(1, {"book.HeroInfo": 0, "book.BookInfo": 1})
>>> book = BookInfo.objects.all()
>>>
5. 數(shù)據(jù)庫表之間的關(guān)聯(lián)
 首先,創(chuàng)建沒有外鍵的數(shù)據(jù)庫表信息
>>> book1 = BookInfo(btitle="小王子",bpub_time=date(1942,5,13))
>>> book2 = BookInfo(btitle="睡美人",bpub_time=date(1952,6,29))
>>> book1.save()
>>> book2.save()
然后,創(chuàng)建外鍵所在的數(shù)據(jù)庫表信息
1. 根據(jù)數(shù)據(jù)表結(jié)構(gòu)直接創(chuàng)建人物
>>> hero1 = HeroInfo(hname="小王子",hgender=True,hcontent="小王子沒有被成人那騙人的世界所征服",hbook=book1)
>>> hero1 = HeroInfo(hname="玫瑰花",hgender=False,hcontent="玫瑰花的虛榮心傷害了小王子對她的感情",hbook=book1)
>>> hero1.save()
>>> hero2.save()
2. 根據(jù)已知的書籍對應(yīng)的人物信息中添加人物
>>> book1 = BookInfo.objects.get(id=2)
>>> book1.heroinfo_set.all()
, ]>
>>> book1.heroinfo_set.create(hname="小狐貍",hgender=True,hcontent="肉眼看不見事務(wù)的本質(zhì),只有用心靈才能洞察一切")

查詢?nèi)宋镄畔⒂袃煞N方式
1. 根據(jù)人物數(shù)據(jù)庫表直接查找
>>> HeroInfo.objects.all()
, ]>
2. 根據(jù)與數(shù)據(jù)對象的關(guān)系查找
>>> book1 = BookInfo.objects.get(id=2)
>>> book1.heroinfo_set.all()
, ]>
>>>
使用mysql文件類型數(shù)據(jù)庫

修改setting.py文件中的數(shù)據(jù)庫配置

# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases

DATABASES = {
    "default": {
        # "ENGINE": "django.db.backends.sqlite3",
        # "NAME": os.path.join(BASE_DIR, "db.sqlite3"),
        "ENGINE": "django.db.backends.mysql",
        "NAME": "firstdjango",    #數(shù)據(jù)庫名稱,若沒有的話,先在數(shù)據(jù)庫中建立
        "USER": "root",
        "PASSWORD": "sheen",
        "HOST": "localhost",
        "PORT": "3306",
    }
}
這里若直接初始化數(shù)據(jù)庫會報錯
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named "MySQLdb"
需要對項目的__init__.py文件進(jìn)行設(shè)置
# PycharmProjectsFristDjangoFristDjango\__init__.py
import pymysql
pymysql.install_as_MySQLdb()

終端運(yùn)行命令,在mysql數(shù)據(jù)庫中,就可以查看到所有的表信息

 python manage.py makemigrations  
 python manage.py migrate 
站點(diǎn)對數(shù)據(jù)庫的操作

通過命令對數(shù)據(jù)庫的操作尤不方便,我們通過后臺管理的網(wǎng)頁來實現(xiàn)對數(shù)據(jù)庫的操作
首先需在admin.py文件中注冊數(shù)據(jù)庫表

#book/admin
from django.contrib import admin
from book.models import BookInfo,HeroInfo
# Register your models here.
admin.site.register(BookInfo)
admin.site.register(HeroInfo)


書籍信息只顯示標(biāo)題,和人物信息只顯姓名,不利于查看,修改注冊的表結(jié)構(gòu)

#book/admin.py
from django.contrib import admin
from book.models import BookInfo,HeroInfo

# Register your models here.

class BookInfoAdmin(admin.ModelAdmin):
    list_display = ["btitle","bpub_time"]

class HeroInfoAdmin(admin.ModelAdmin):
    list_display = ["hname","hgender","hcontent","hbook"]   #顯示欄
    list_filter = ["hbook"] #過濾器
    search_fields = ["hname","hbook"]   #搜索欄
    list_per_page = 2   #每頁顯示多少條數(shù)據(jù)
admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(HeroInfo,HeroInfoAdmin)

如何在圖書表中直接添加人物,網(wǎng)頁顯示效果:如果跳轉(zhuǎn)到圖書詳情的頁面,可以直接添加人物
添加HeroInline類,修改BookInfoAdmin類
# book/admin.py
class HeroInline(admin.TabularInline):
    model = HeroInfo
    extra = 2   #每次增加兩個添加人物的表單
    

class BookInfoAdmin(admin.ModelAdmin):
    list_display = ["btitle","bpub_time"]
    inlines = [HeroInline]

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44994.html

相關(guān)文章

  • python大佬養(yǎng)成計劃----Django圖書人物適配系統(tǒng)(前端)

    摘要:兩者相同的地方是都可以將一個普通函數(shù)變成視圖函數(shù)。不同的是,使用裝飾器定義路由,而使用正則表達(dá)式定義路由。中間什么都沒有,表示這個正則匹配的是根目錄,。最后修改的網(wǎng)頁顯示如圖項目框架圖 Django添加路由 與flask一樣,django也需要使用路由將URL與服務(wù)端要執(zhí)行的代碼關(guān)聯(lián)。 兩者相同的地方是都可以將一個普通函數(shù)變成視圖函數(shù)。不同的是,flask使用裝飾器@app.route...

    amuqiao 評論0 收藏0

發(fā)表評論

0條評論

lufficc

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<