Django - mysql 搭建資料管理系統 - 章節1
最近舅舅讓我幫他的公司做一個資訊管理系統,要求簡單操作,能夠快速上手,同時要求伺服器儲存資料,每個人要有不同的許可權去訪問或者更改資料
於是我想到了我的一門大作業,用Django寫的資料管理系統,但是當時沒有要求用mysql,操作也比較簡單,但是這次,我就只能用mysql了。。。。
本節是我的第一節,因為還要準備過年,所以年後再更細節。
本篇有我安裝過程中遇到的各種坑,還有基本步驟和解決方法。
分為一下幾個部分
第一部分:
Django 初始化部分
第二部分
MySQL初始化部分
第三部分
結合部分
第一部分:安裝部分
Django 安裝
有兩種方法,第一種在本地安裝然後執行
sudo pip3 install Django==1。11。7 # 安裝
django-admin startproject HelloWorld #專案建立
python3 manage。py runserver #啟動服務
#python3 manage。py runserver [0。0。0。0:8000] #也可以這樣改變執行埠
但是你在用pycharm 編譯的時候可能會使用其他的環境,導致你安裝無效,你也可以使用本地環境(如何設定pycharm中使用的環境為本地的環境,而不用重新安裝包 - 慢行厚積 - 部落格園)
第二種方法:
直接在pycharm裡面new 一個 project 建立的時候選擇建立Django project 就好了,具體操作(CSDN-專業IT技術社群-登入)
2。 Django url: 在Django裡面資料流通方式是:
首先輸入你的ip和埠號還有你的html 他會去url。py中查詢符合條件的url,一旦查詢到符合條件的就會立馬呼叫它對應的函式,展示這個函式的返回值。
例如:在你輸入127。0。0。1:8000/hello的時候,他會到url。py中找到hello這裡,然後呼叫後面的view。hello函式,並顯示這個函式返回的值and這個函數里面可以有很多操作。(Django 第二課 2。【urlpatterns】)
from django。conf。urls import url
from django。contrib import admin
from 。 import view
urlpatterns = [
# when they find the first which match it is will use the html
url(r‘^admin/’, admin。site。urls),
# http://127。0。0。1:8000/admin 對應裡面的admin介面(預設是登陸介面)
url(‘hello’,view。hello),
# http://127。0。0。1:8000/hello 對應view 裡面的hello函式->返回 hello頁面
]
3。 建立app
Django 規定,如果要使用模型就必須建立一個app ,下面先建立一個app
django-admin startapp TestModel
位置在
修改models。py中的內容
from django。db import models
class Test(models。Model):
name = models。CharField(max_length=20)
# 隨意命名,我只是這樣寫了
修改setting。py中新增一行 ‘TestModel‘
INSTALLED_APPS = [
’django。contrib。admin‘,
’django。contrib。auth‘,
’django。contrib。contenttypes‘,
’django。contrib。sessions‘,
’django。contrib。messages‘,
’django。contrib。staticfiles‘,
’TestModel‘
]
這裡的坑就是:如果你的pycharm使用的是虛擬環境(python3。7這類,但是你安裝在了本地,mac 預設環境,那麼你就會顯示各種bug)
第二部分:MySQL初始化部分。
這裡我們需要安裝
mysql + mysqlclient(進行python對mysql的操作)
mysql 下載地址(MySQL Community Downloads) 然後下載MySQL Community Server 和Download MySQL Workbench
這裡說一下 workbench不是必須的但是如果你不熟悉sql語句操作,他還是很方便的圖形化介面,進行資料視覺化修改等。
剛開始安裝workbranch遇到了這個啟動問題
Authentication plugin ’caching_sha2_password‘ cannot be loaded: dlopen(/usr/local/mysql/lib/plug
解決方案是重新initdatabase
2。下載mysqlclient
下載方法:sudo pip3 install mysqlclient
這裡有坑,如果你遇到了
那麼你需要的就是執行
export PATH=$PATH:/usr/local/mysql/bin
或者把它放到使用者名稱下的 。/。bash_profile 檔案中
mysql 問題
那麼就先用root登陸
嘗試一個語句又報錯,要求重新設定密碼
兩種解決方案,第二種對我work
下面教程是sql基本教程,推薦w3school的教程
(https://www。w3school。com。cn/sql/sql_create_db。asp)
(
https://www。
runoob。com/sql/sql-tuto
rial。html
)
建立成功
下面說一點視覺化操作
點選圓柱加號就可以建立資料庫
之後可以點選table去建立table 也可以自己去import已經有的資料庫
可以傻瓜建表,注意這裡面的引數,你需要選擇一個PK(primary key name)才能讓你的表不是read only (
https://
stackoverflow。com/quest
ions/10815029/mysql-workbench-edit-table-data-is-read-only
)
,至於什麼是PK可以看資料庫教程,唯一存在,像身份證號一樣。
Datatype varchar是預設的,就是什麼都可以,括號裡是最大長度,後面還有一堆引數,用來設計約束的
點選apply 會生成sql語句
查詢一下
成功。現在就看如何用Django 去連結資料庫了
第三部分:Django 連結資料庫
下一個坑出現:
django
。
core
。
exceptions
。
ImproperlyConfigured
:
mysqlclient
1
。
3
。
13
or
newer
is
required
;
you
have
0
。
9
。
3
。
解決方法:
點選最下面的連結然後進入檔案把報錯那行註釋掉就好,前面加一個pass
下一步建立使用者
Django連線mysql資料庫登入Django後臺
預設Django使用的是sqllite3,mysqldb沒有支援python3版本的,可以使用pymysql代替mysqldb
1、在專案根目錄下__init__。py檔案中加入以下程式碼
import pymysql
pymysql。install_as_MySQLdb()
2、使用mysqlclient代替mysqldb(因為mysqldb已經過時了)
pip3 install mysqlclient
3。更改專案setting。py中對資料庫的配置
DATABASES = {
’default‘: {
’ENGINE‘: ’django。db。backends。mysql‘,
’NAME‘: ’庫名字‘,
’USER‘: ’連線使用者名稱‘,
’PASSWORD‘:’連線密碼‘,
’HOST‘:’連線地址‘,
’PORT‘:’資料庫埠號‘
}
}
4、初始化資料庫,建立相應的表
python3 manager。py migrate
生成相應表的資料庫:
5。 建立Django後臺登入使用者
python3 manage。py createsuperuser
#找找提示輸入使用者名稱密碼就可以了
之後登陸admin介面
輸入使用者名稱密碼就好啦
之後就可以透過這個瀏覽器訪問對應的url網頁了
資料庫連線(
https://www。
runoob。com/django/djang
o-model。html
)
加入test的code
# -*- coding: utf-8 -*-
from django。http import HttpResponse
from TestModel。models import Test
# 刪除操作
def testdb2(request):
test1 = Test(name=’runoob‘)
test1。save()
return HttpResponse(“
Add sucessfully!
”)# 資料庫查詢
def testdb(request):
# 初始化
response = “”
response1 = “”
# 透過objects這個模型管理器的all()獲得所有資料行,相當於SQL中的SELECT * FROM
list = Test。objects。all()
# filter相當於SQL中的WHERE,可設定條件過濾結果
response2 = Test。objects。filter(id=1)
# 獲取單個物件
response3 = Test。objects。get(id=1)
# 限制返回的資料 相當於 SQL 中的 OFFSET 0 LIMIT 2;
Test。objects。order_by(’name‘)[0:2]
# 資料排序
Test。objects。order_by(“id”)
# 上面的方法可以連鎖使用
Test。objects。filter(name=“runoob”)。order_by(“id”)
# 輸出所有資料
for var in list:
response1 += var。name + “ ”
response = response1
return HttpResponse(“
” + response + “
”)# 資料更新
def testdb(request):
# 修改其中一個id=1的name欄位,再save,相當於SQL中的UPDATE
test1 = Test。objects。get(id=1)
test1。name = ’Google‘
test1。save()
# 另外一種方式
# Test。objects。filter(id=1)。update(name=’Google‘)
# 修改所有的列
# Test。objects。all()。update(name=’Google‘)
return HttpResponse(“
修改成功
”)# 資料庫刪除
def testdb(request):
# 刪除id=1的資料
test1 = Test。objects。get(id=1)
test1。delete()
# 另外一種方式
# Test。objects。filter(id=1)。delete()
# 刪除所有資料
# Test。objects。all()。delete()
return HttpResponse(“
刪除成功
”)在url。py裡面加入這個函式的呼叫介面:
from django。conf。urls import url
from django。contrib import admin
from 。 import view,testdb
urlpatterns = [
# when they find the first which match it is will use the html
url(r’^admin/‘, admin。site。urls),
url(’hellos‘,view。hello),
url(r’^testdb$‘, testdb。testdb),
]
結果:
然後看一下資料庫
新增成功啦
關於刪除更新等都在上面連結裡就不說了。
其他的部分如何去進行資料庫設計&前端設計&登陸驗證在後面說