個人覺得,從簡單的專案入手,這樣學起來會很快。
在專案中,發現問題就說問題。
網上有很多python的基礎教程,畢竟是基礎,所以大多都是免費的,大家可以看看,有一點基礎應該都可以看得懂。跟著一起邊做簡單的專案,邊學習了
首先,開啟pycharm建立名為:stu_test的專案,如圖:
點選+Create Nwe Project
建立Django專案
左側選中Django,這裡我的專案路徑:E:\\django_test\\stu_test (stu_test是我的專案名稱)
選擇python直譯器,這裡我用本機的虛擬環境,選擇第二個選項。第一個選項是建立虛擬環境。
最下面,填寫APP的名稱,這裡用app01(只是學習階段,名字隨便起的,本人詞量太少了,大家海涵)
建立完成,第一時間先設定(stu_test/stu_test/settings.py)
由於是pycharm建立的,app自動就幫我們新增好了,模型也配置好了,我們可以先不管
資料庫我們就先用sqlite吧,這是Django自帶的,我們現在只是學習,暫時也夠用了。
就先拉到最下面,修改下面兩項,一個是語言環境,一個是時區。
from django.db import models# 新增的表都需要繼承自models.Model# 建立名為StuClass的班級表class StuClass(models.Model):#models.CharField()欄位型別為char # verbose_name="班級" 設定欄位名為班級 # max_length=10 長度為10 # null=False 不可以為空 # unique=True不允許重複 class_stu = models.CharField(verbose_name="班級", max_length=10, null=False, unique=True)# auto_now_add=True 新增的時間 # 增加下面兩個欄位,方便到時候維護統計 add_time = models.DateTimeField(verbose_name="新增時間", auto_now_add=True)# auto_now=True 當前時間 updata_time = models.DateTimeField(verbose_name="新增時間", auto_now=True)# 建立名為Students的學生表class Students(models.Model): name = models.CharField(verbose_name="姓名", max_length=6, null=False) age = models.IntegerField(verbose_name="年齡", null=False)# 構造一個元組 genders = ( (0,"男"), (1,"女"), ) # choices的意思是選擇,choices=genders在genders中選擇 gender = models.IntegerField(verbose_name="性別", choices=genders) add_time = models.DateTimeField(verbose_name="新增時間", auto_now_add=True) updata_time = models.DateTimeField(verbose_name="新增時間", auto_now=True)# 設定外來鍵,與StuClass(班級關聯起來) # on_delete=models.CASCADE 的意思就是關聯刪除 # 所屬的班級刪除了,相應的學生也會刪除forkey = models.ForeignKey(to=StuClass, on_delete=models.CASCADE)
接下來就要新增欄位了,我們先做個簡單分析,構建一個結構,如圖:(用記事本寫的,有點渣,大家有好用的工具可以推薦下)
通過上圖可以發現,欄位中要包含班級,姓名,性別,年齡這幾個欄位。
其中每個班級中都有姓名,性別,年齡。(文字說不清了,最好的表達形式就是程式碼,我們上程式碼):
位置:stu_test/app1/models.py
python manage.py makemigrations
欄位建立完畢,把欄位新增到管理後臺(Django自帶的,不用自己寫,是不是很方便?)
位置:stu_test/app1/admin.py (一看知道admin是管理員的意思)
from django.contrib import admin# 匯入models,就是我們剛寫的欄位類,同級目錄我們用.models,星號代表匯入全部from .models import * # 加入我們寫的兩個表# admin.site.register 這一串死記硬背吧,發現這個在pycharm中沒有提示admin.site.register(StuClass)admin.site.register(Students)
接下我們遷移資料 開啟Terminal(在pycharm的左下角)如圖
這裡我們要注意方框裡面,Djang_env 是使用的虛擬環境
E:\\django_test\\stu_test 是當前路徑
輸入下面程式碼,遷移檔案
python manage.py migrate
提示如下
遷移檔案生成了,接下來開始遷移
繼續輸入如下程式碼
python manage.py createsuperuser
提示如下:
資料已經遷移完畢了。
我們要通過管理後臺錄入學生資訊,那麼就要建立管理員賬戶。輸入下面程式碼:
python manage.py createsuperuser
根據提示,我們一次填入使用者名稱,郵箱,密碼如圖:
我輸入的密碼是123456,說密碼太常見了,要不要使用。
這裡輸入y 然後回車,就用這個密碼。管理員賬戶就建立成功了。
接下來我們執行伺服器,繼續輸入如下程式碼:
python manage.py runserver
提示如圖:
這裡的http://127.0.0.1:8000/ 其中127.0.0.1代表我們本機的,埠為8000。
伺服器就跑起來了,接下來開啟http://127.0.0.1:8000/admin(注意:地址裡面的admin不是我們管理員使用者名稱,是路由裡面的地址,位置:stu_test/stu_test/urls.py中預設的,我們先不修改)
開啟後如下:
輸入我們的使用者名稱密碼,我這裡是admin和123456
我們會看到下圖:
這裡可以看到之前建立的兩個表,
看著是不是哪裡有點彆扭,兩個表的名字英文的看起來很不舒服?
我們開啟之前的models.py,修改程式碼如下
from django.db import modelsclass StuClass(models.Model): class_stu = models.CharField(verbose_name="班級", max_length=10, null=False, unique=True) add_time = models.DateTimeField(verbose_name="新增時間", auto_now_add=True) updata_time = models.DateTimeField(verbose_name="新增時間", auto_now=True) class Meta: verbose_name = "班級" verbose_name_plural = verbose_nameclass Students(models.Model): name = models.CharField(verbose_name="姓名", max_length=6, null=False) age = models.IntegerField(verbose_name="年齡", null=False) genders = ( (0,"男"), (1,"女"), ) gender = models.IntegerField(verbose_name="性別", choices=genders) add_time = models.DateTimeField(verbose_name="新增時間", auto_now_add=True) updata_time = models.DateTimeField(verbose_name="新增時間", auto_now=True)forkey = models.ForeignKey(to=StuClass, on_delete=models.CASCADE) class Meta: # 把表的名字改為學生 verbose_name = "學生"# 這句是複數的意思,我們都知道英語裡面,複數大多數是在單詞後面加s,如果我們不寫這句 # 到時候顯示的名字就是 學生s了 verbose_name_plural = verbose_name
儲存一下,伺服器會自動重啟,我們重新整理下剛才的頁面:
是不是看著就方便許多呢?
接下來我們新增資料,先新增幾個班級,比如1班,2班,3班
這裡就不細說了,都是中文,相信都會添加了。
新增完成後,我們進入班級裡面,如圖:
這都是什麼,看起來很費勁。我們再開啟models.py檔案,修改如下程式碼:
from django.db import modelsclass StuClass(models.Model): class_stu = models.CharField(verbose_name="班級", max_length=10, null=False, unique=True) add_time = models.DateTimeField(verbose_name="新增時間", auto_now_add=True) updata_time = models.DateTimeField(verbose_name="新增時間", auto_now=True) class Meta: verbose_name = "班級" verbose_name_plural = verbose_name def __str__(self): return self.class_stuclass Students(models.Model): name = models.CharField(verbose_name="姓名", max_length=6, null=False) age = models.IntegerField(verbose_name="年齡", null=False) genders = ( (0,"男"), (1,"女"), ) gender = models.IntegerField(verbose_name="性別", choices=genders) add_time = models.DateTimeField(verbose_name="新增時間", auto_now_add=True) updata_time = models.DateTimeField(verbose_name="新增時間", auto_now=True) forkey = models.ForeignKey(to=StuClass, on_delete=models.CASCADE) class Meta: verbose_name = "學生" verbose_name_plural = verbose_name def __str__(self): return self.name
我們可以看到
# 班級表中多了:def __str__(self):# self.class_stu # self代表當前類 # self.class_stu就是當前類下的class_stu欄位 # 不難發現,class_stu這個欄位使我們定義的班級的名字 return self.class_stu# 學生表中多了:# 為什麼要寫這裡呢,因為到時候新增學生的時候,也會是這樣子# 你們可以先不寫,到時候新增學生的時候再寫也行# 這裡直接加上,是為了減少一些沒必要的複製def __str__(self):# 與班級同理 return self.name
儲存一下,我們再重新整理下頁面看看,如圖
這樣是不是就不彆扭了,def __str__(self): 這裡我們硬記下來就行
接下來我們新增學生。舉一反三,應該學生大家也會添加了。現在是學習嘛,沒必要加那麼多,我大概加了一些,如圖:
這樣,我們就把資料在後臺錄入完畢了。此篇到此結束,下一篇我們來講如何配置路由,建立頁面,以及增刪改查,大家可以先自己動手敲一遍,增加一些印象,這樣學起來也會快很多。
寫了一下午了,該吃晚飯了,一天都沒吃,餓的不行,大家也要多注意身體呀。