国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

lufficc / 2231人閱讀

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

Django

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

Django基礎

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

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

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

修改語言,時區(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/,可以訪問到后臺管理
這里可以添加新用戶和新的組,新的用戶、組可以被分配權力,但不能執行超級用戶的分發權限的功能
示例:給add_group組添加‘Can add group ’
創建用戶normal,隸屬add_group組,勾選職員狀態(指明用戶是否可以登錄到這個管理站點)。
使用normal用戶登陸后臺管理時,將只有增加組的選項。

創建自己的應用(app) -- book

terminal輸入

python manage.py startapp book

會在當前項目里生成book/目錄

創建好自己的應用文件后,首先在項目里注冊應用setting.py

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

開始寫數據庫結構(model.py)

首先確定數據庫表有哪些:書籍、人物。
然后確定每個表的結構,書籍的屬性有:id,標題,出版時間,摘要,封面。人物屬性:id,姓名,性別,簡介,所屬書籍。
最后確定表之間的關系:一個書籍里面有多個人物,人物數據庫表寫外鍵

在django框架結構里,不需要像flask寫反向引用

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

# Create your models here.
class BookInfo(models.Model):
    # 這里不需要寫id,Django框架默認會生成id,并作為主鍵pk
    btitle = models.CharField(max_length=100,unique=True,verbose_name="書籍標題")     # 表示在后臺管理中這一欄的中文顯示
    bpub_time  = models.DateField(verbose_name="出版時間")
    # bcontent = models.TextField(default="摘要",verbose_name="書籍摘要")
    # bimg = models.ImageField(default=None,upload_to="static/uploads/")
    class Meta:    ##表示這個數據庫表在后臺中的中文顯示,因為英語區分單復數,所以需要寫上單復數的中文顯示
        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="人物性別")
    # 任務簡介
    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文件類型數據庫

Django默認使用sqlit3數據庫,可在項目的setting.py文件中查看

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

寫好應用book的models.py文件后,我們開始創建數據庫

python manage.py makemigrations   
python manage.py migrate 

如何進入sqlite3數據庫表

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

根據指定信息查找

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

查詢人物信息有兩種方式
1. 根據人物數據庫表直接查找
>>> HeroInfo.objects.all()
, ]>
2. 根據與數據對象的關系查找
>>> book1 = BookInfo.objects.get(id=2)
>>> book1.heroinfo_set.all()
, ]>
>>>
使用mysql文件類型數據庫

修改setting.py文件中的數據庫配置

# 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",    #數據庫名稱,若沒有的話,先在數據庫中建立
        "USER": "root",
        "PASSWORD": "sheen",
        "HOST": "localhost",
        "PORT": "3306",
    }
}
這里若直接初始化數據庫會報錯
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named "MySQLdb"
需要對項目的__init__.py文件進行設置
# PycharmProjectsFristDjangoFristDjango\__init__.py
import pymysql
pymysql.install_as_MySQLdb()

終端運行命令,在mysql數據庫中,就可以查看到所有的表信息

 python manage.py makemigrations  
 python manage.py migrate 
站點對數據庫的操作

通過命令對數據庫的操作尤不方便,我們通過后臺管理的網頁來實現對數據庫的操作
首先需在admin.py文件中注冊數據庫表

#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)


書籍信息只顯示標題,和人物信息只顯姓名,不利于查看,修改注冊的表結構

#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   #每頁顯示多少條數據
admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(HeroInfo,HeroInfoAdmin)

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44994.html

相關文章

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

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

    amuqiao 評論0 收藏0

發表評論

0條評論

lufficc

|高級講師

TA的文章

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