• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 【Django學習筆記】3:在業務邏輯中使用內置的SQLite數據庫

    標簽: Django  SQLite

    注冊自定的app

    在同名子目錄下的settings.py中注冊這個自定的app:

    # Application definition
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # 在這里注冊了自定的app
        'lzhapp',
    ]

    配置要使用的數據庫

    在同名子目錄下的settings.py中配置要使用的數據庫相關信息:

    # Database
    # https://docs.djangoproject.com/en/2.0/ref/settings/#databases
    
    DATABASES = {
        # 默認使用的數據庫
        'default': {
            # sqlite3的數據庫驅動
            'ENGINE': 'django.db.backends.sqlite3',
            # 使用sqlite3數據庫
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

    編寫模型層

    Django雖然是MTV框架,但其中的M和V與MVC框架基本是一致的,所以也需要模型層。模型層在同名子目錄下的models.py中配置:

    from django.db import models
    
    
    # Create your models here.
    
    # 模型層,用戶信息類,繼承Model類
    class UserInfo(models.Model):
        # 用戶名字段,類型是長度為32的char字符串
        usr = models.CharField(max_length=32)
        # 密碼字段,類型是長度為32的char字符串
        pwd = models.CharField(max_length=32)

    makemigrations

    在對模型層文件進行配置以后,在PyCharm命令行使用:

    python manage.py makemigrations

    具體出現:

    E:\WorkSpace\PyCharm\lzhDjango>python manage.py makemigrations
    Migrations for 'lzhapp':
      lzhapp\migrations\0001_initial.py
        - Create model UserInfo
    
    E:\WorkSpace\PyCharm\lzhDjango>

    在同名子目錄下的migrations/子目錄下,出現了一個文件:
    這里寫圖片描述
    這個文件的內容是:

    # Generated by Django 2.0.5 on 2018-06-27 07:49
    
    from django.db import migrations, models
    
    
    class Migration(migrations.Migration):
    
        initial = True
    
        dependencies = [
        ]
    
        operations = [
            migrations.CreateModel(
                name='UserInfo',
                fields=[
                    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                    ('usr', models.CharField(max_length=32)),
                    ('pwd', models.CharField(max_length=32)),
                ],
            ),
        ]

    這條命令即是要生成這個文件,這個文件意在記錄對模型層的改動,但這些改動還沒有寫入數據庫。

    migrate

    繼續,在PyCharm命令行使用:

    python manage.py migrate

    具體出現:

    E:\WorkSpace\PyCharm\lzhDjango>python manage.py migrate
    Operations to perform:
      Apply all migrations: admin, auth, contenttypes, lzhapp, sessions
    Running migrations:
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
      Applying admin.0002_logentry_remove_auto_add... OK
      Applying contenttypes.0002_remove_content_type_name... OK
      Applying auth.0002_alter_permission_name_max_length... OK
      Applying auth.0003_alter_user_email_max_length... OK
      Applying auth.0004_alter_user_username_opts... OK
      Applying auth.0005_alter_user_last_login_null... OK
      Applying auth.0006_require_contenttypes_0002... OK
      Applying auth.0007_alter_validators_add_error_messages... OK
      Applying auth.0008_alter_user_username_max_length... OK
      Applying auth.0009_alter_user_last_name_max_length... OK
      Applying lzhapp.0001_initial... OK
      Applying sessions.0001_initial... OK
    
    E:\WorkSpace\PyCharm\lzhDjango>

    此時,對模型層的改動已經依據上一步所生成的文件全部提交到數據庫中。

    與數據庫交互的業務邏輯

    Django自帶一個ORM框架,可以像Hibernate那樣操作數據庫。修改app目錄下的views.py文件,在其中操作數據庫:

    from django.shortcuts import render
    # 導入要使用的模型層文件
    from lzhapp import models
    
    
    # 路由中指定要調用的函數,傳入一個用戶請求參數
    def index(request):
        # 從數據庫中讀取所有數據
        inptDicLst = models.UserInfo.objects.all()
        # 返回一個頁面,如返回自己這個頁面本身,第三個參數以字典方式提供數據對象
        return render(request, 'index.html', {'lst': inptDicLst})
    
    
    # 表單提交調用的函數
    def gosub(request):
        # 相當于Java的Servlet中的doPost情況
        if request.method == 'POST':
            # 獲取表單提交來的數據
            username = request.POST.get('username', None)
            password = request.POST.get('password', None)
            # 在控制臺輸出表單的提交看一下
            print(username, password)
            # 將數據添加到數據庫,而不像之前那樣使用全局變量列表
            models.UserInfo.objects.create(usr=username, pwd=password)
        # 從數據庫中讀取所有數據
        inptDicLst = models.UserInfo.objects.all()
        # 返回一個頁面,如返回自己這個頁面本身,第三個參數以字典方式提供數據對象
        return render(request, 'index.html', {'lst': inptDicLst})

    測試運行

    訪問http://localhost:8000/index/
    這里寫圖片描述
    提交一些數據:
    這里寫圖片描述
    關閉程序,再重新打開,然后訪問這個網址,仍然能看到剛剛提交的數據,這就是與不使用數據庫的區別。

    版權聲明:本文為SHU15121856原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/SHU15121856/article/details/80830511

    智能推薦

    Android學習(24)SQLite_數據庫的使用

    Android學習(24)SQLite_數據庫的使用 SQLite數據庫介紹: 輕量級:SQLite是進程內的數據庫引擎,因此不存在數據庫的客戶端和服務器。使用SQLite一般只需要帶上它的一個動態庫,就可以享受它的全部功能。而且動態庫的尺寸也相當小。 獨立性:SQLite數據庫的核心引擎本身不依賴第三方軟件,使用它也不需要“安裝”,所以在使用的時候能夠省去不少麻煩 隔離性...

    Android開發學習---SQLite 數據庫的使用

    一.創建數據庫 1.創建MyDatabaseHelper 類繼承SQLiteOpenHelper幫助類,借助這個類就可以對數據庫進行創建和升級。 2.SQLiteOpenHelper 是一個抽象類,必須繼承才能使用。 3.SQLiteOpenHelper 中有兩個抽象方法,分別是onCreate()和 onUpgrade(),我們必須在自己的幫助類里面重寫這兩個方法,然后分別在這兩個方法中去實現創...

    Django使用sqlite3數據庫(嘔心瀝血終于成功了)

    首先,Django默認使用的就是sqlite3,而大多數人一上來就是使用MySQL,配置更加復雜,搞了一兩個小時也沒弄好(我太菜了,,,)對于小的網站項目,使用sqlite3足以。 首先,需要安裝sqlite3 如果使用的是VSCode,可以直接搜索sqlite插件安裝即可。 或者,到官方下載地址下載。SQLite3的下載地址:http://www.sqlite.org/download.html...

    在Unity工程中使用SQLite數據庫

    Chinar blog :www.chinar.xin 在Unity工程中使用SQLite數據庫 本文提供全流程,中文翻譯。 Chinar 的初衷是將一種簡單的生活方式帶給世人 使有限時間 具備無限可能 Chinar —— 心分享、心創新! 助力快速完成在 Unity 工程中使用SQLite數據庫 為初學者節省寶貴的時間,避免采坑! Chinar 教程效果: 文章目錄 1 ...

    Android中使用LitePal操控SQLite數據庫

    《第一行代碼》讀書手札 (一)什么是LitePal數據庫 LitePal數據庫是安卓的一個開源庫,我們在以后的開發中,將會遇到許許多多的開源庫,感謝開源社 區;因為開源社區的存在,一些我們需要的功能,不再需要我們從頭開始寫,我們就可以直接使用; (二)配置LitePal 由于LitePal是開源的第三方庫。但是,我們的JDK開發包中,并沒有內置這些第三方包,所有,我們 需要配置一下; 在Andro...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡