Python后端---使用Django+Mysql搭建一个简单的网站
提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 前言
- 一、項目搭建
- 前期準備
- 命令行創建項目和app
- Django項目配置文件說明
- 使用數據庫
- 編寫業務邏輯
- 配置url主路由
- 運行server并訪問
- app內部的獨立文件
- 困擾我的MySQL數據庫的配置問題
- 安裝MySQL服務
- MySQL創建數據庫和創建數據表
- 總結
前言
提示:最近在學習Django,搭建一個簡單的“HelloWord”網頁,搭建過程中遇到了很多問題,記憶力不好,所以寫一個博客歸納總結一下,問題主要包括Django項目的創建、部署、配置MySQL數據庫等問題以及相關Django、mysql的命令行操作指令匯總,方便知識點復盤。如果你也是Django新手入門,希望你能從本篇文章有所收獲。
提示:以下是本篇文章正文內容,下面案例可供參考
一、項目搭建
前期準備
1、python3.7
2、專業版Pycharm IDE
3、安裝Django模塊
4、安裝MySQL數據庫服務
說明一下,社區版本的pycharm適合純python開發,用于教學,而專業版更適合用于企業項目開發,專業版,功能豐富,例如:Web開發,Python Web框架,Python的探查,遠程開發能力,數據庫和SQL支持,對開發者來說十分棒,十分專業的開發工具。另外,為什么要配置MySQL數據庫呢?因為Django 中使用默認的 SQLite3 數據庫的話(反正我覺得非常不好用)可以進行改寫,而且在實際生產環境,Django是不可能使用SQLite這種輕量級的基于文件的數據庫作為生產數據庫。一般較多的會選擇MySQL。
我們打開pycharm新建一個Django工程(也可以直接在terminal下用指令django-admin startproject xxx創建)
目前,我使用Pycharm創建項目的App時候會報錯!問題目前還沒有解決,但是可以使用命令行 python manage.py startapp App名稱 創建App文件夾。
錯誤如下:
建好后會自動生成一個目錄框架。那么來了解下這個框架里文件的作用。
命令行創建項目和app
#創建demo1的項目 D:\django>django-admin startproject demo1 D:\django>cd demo1 #創建app1的APP D:\django\demo1>python manage.py startapp app1 cd app1 #創建templates(模板目錄)和static(靜態文件目錄) mkdir templates mkdir staticcd static #創建css、js、images、files、plugins分別用來存放css樣式文件、JavaScript文件、圖片文件、文本文件、插件 mkdir css mkdir js mkdir images mkdir files mkdir pluginsDjango項目配置文件說明
二級子目錄 BookStore 下的文件稱為 Django 項目的配置文件, 它們在創建項目的時候自動生成。下面我們對上述涉及到的文件進行詳細的說明:
1) manage.py文件
一級子目錄中的 manage.py 文件是管理 Django 項目的重要命令行工具,它主要用于啟動項目、創建應用和完成數據庫的遷移等。
2) init.py文件
二級子目錄中的 init.py 文件用于標識當前所在的目錄是一個 Python 包,如果在此文件中,通過 import 導入其他方法或者包會被 Django 自動識別。
3) settings.py文件
settings.py 文件是 Django 項目的重要配置文件。項目啟動時,settings.py 配置文件會被自動調用,而它定義的一些全局為 Django 運行提供參數,在此配置文件中也可以自定義一些變量,用于全局作用域的數據傳遞。
4) urls.py文件
url.py 文件用于記錄 Django 項目的 URL 映射關系,它屬于項目的基礎路由配置文件,路由系統就是在這個文件中完成相應配置的,項目中的動態路徑必須先經過該文件匹配,才能實現 Web 站點上資源的訪問功能。
5) wsgi.py文件
wsgi.py 是 WSGI(Web Server Gateway Interface)服務器程序的入口文件,主要用于啟動應用程序。它遵守 WSGI 協議并負責網絡通訊部分的實現,只有在項目部署的時候才會用到它。
配置app_01和mysql數據庫
untitled/untitled/settings.py文件中修改:
在 settings.py 文件 INSTALLD_APPS 列表中注冊app
INSTALLED_APPS=[
‘應用命名’.apps.應用名稱Config
或者
‘應用名稱’(不推薦使用)。
]
在修改settings.py同級的__init__.py文件:
#告訴Django用pymysql來連接數據庫 import pymysql pymysql.install_as_MySQLdb()注意:把sqlite3數據庫修改為mysql數據庫一定到在setting.py目錄下的initial.py文件下添加如上代碼
使用數據庫
demo1/app_01/models.py文件中:
#一個類代表這一個表 class test(models.Model):#在表中添加name字段name = models.CharField(max_length = 20)在cmd或者終端中輸入命令:
# 讓 Django 知道我們在我們的模型有一些變更 #生成遷移,生成sql腳本 python manage.py makemigrations# 創建表結構 #執行遷移,根據遷移文件創建表 python manage.py migrate #創建表示會加上app的名稱,如果表里沒用主鍵Django會自動創建id的主鍵##可以增加的操作 創建超級管理員
在命令行窗口輸入:python manage.py createsuperuser
注意:在創建超級管理員之前,你還得現在數據庫創建一下基本的表,否則超級管理員也無法創建,需要運行: python manage.py migrate
編寫業務邏輯
新建成功工程后views.py文件里是空的,需要自己編寫業務邏輯
from django.shortcuts import HttpResponse # 導入HttpResponse模塊def hello(request): # request是必須帶的實例。類似class下方法必須帶self一樣return HttpResponse("Hello Django!!") # 通過HttpResponse模塊直接返回字符串到前端頁面配置url主路由
from django.contrib import admin from django.urls import path from app_01 import viewsurlpatterns = [path('',views.hello,name='hello'),path('admin/',admin.site.urls),]運行server并訪問
terminal下執行 python manage.py runserver 這樣執行默認的路徑是127.0.0.1:8080
指定端口或地址就再后面寫上,如:python manage.py runserver 127.0.0.1:8888
然后瀏覽器訪問http://127.0.0.1:8888
app內部的獨立文件
主路由與子路由
1.子路由(獨立路由)
獨立路由(子路由):將每個應用中的路由系統寫自己的app應用的urls.py 文件中(需要自己創建)。
之前我們將所有的路由都放到了主urls當中,django支持我們在每個app應用中編寫自己的子路由(url)
(1)、編寫自己的子路由
(2)主路由包含子路由
首先導入from django.urls import include
使用 path(‘一般是應用名稱’ ,include(‘應用名稱.urls’))
主路由中一般放共用的路由系統。
(3)訪問路徑時,主路徑+子路徑
困擾我的MySQL數據庫的配置問題
由于Django中是默認使用SQLite數據庫的,在settings.py文件中的默認配置如下:
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),} }但是,我需要配置數據庫為mysql,該怎么辦呢?
創建mysql數據庫
1、檢查本機是否安裝Mysql
ctrl+r 快捷鍵打開cmd
輸入 services.msc
查看服務列表中有無mysql服務
如果有服務,那就代表已經安裝了。如果沒安裝,請參考安裝mysql鏈接:
https://www.cnblogs.com/zhangkanghui/p/9613844.html
安裝MySQL服務
安裝包地址:https://dev.mysql.com/downloads/mysql/
下載完成后,選擇一個磁盤內放置并解壓。
2020年2月14日,mysql官網進不去了,好吧那就來個鏡像,總沒問題了,如果官網龜速下載,建議使用下面的鏡像巨快
Mysql國內鏡像:http://mirrors.sohu.com/mysql/MySQL-8.0/
安裝教程
1. 配置環境變量
變量名:MYSQL_HOME
變量值:E:\mysql-5.7.20-winx64
2. 生成data文件
以管理員身份運行cmd
進入E:\python\mysql\mysql-8.0.12-winx64\bin>下
執行命令:mysqld --initialize-insecure --user=mysql 在E:\python\mysql\mysql-8.0.12-winx64\bin目錄下生成data目錄
3. 安裝MySQL
繼續執行命令:mysqld -install
4. 啟動服務
繼續執行命令:net start MySQL
5. 登錄MySQL
登錄mysql:(因為之前沒設置密碼,所以密碼為空,不用輸入密碼,直接回車即可)
E:\python\mysql\mysql-8.0.12-winx64\bin>mysql -u root -p
6. 查詢用戶密碼
查詢用戶密碼命令:mysql> select host,user,authentication_string from mysql.user;
7. 設置(或修改)root用戶密碼
mysql> use mysql
提別注意:下面這個修改密碼的方式不正確,可能是因為版本問題。最近解決了。
mysql> update mysql.user set authentication_string=(“123456”) where user=“root”;
解決方案如下:
mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
mysql> flush privileges;
#作用:相當于保存,執行此命令后,設置才生效,若不執行,還是之前的密碼不變
8. 退出
mysql> quit
Bye
9. 再次登錄
解決問題!!!
ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
關于修改密碼再次登錄出現ERROR的解決方案:
首先問題出現的原因在于可能是因為版本不同,命令有所差異。個人認為,其實無所謂了,最終問題解決了就是了。
如果你是按照上面的完整教程安裝出現這種問題的解決方案:
1、所有東西都刪除,然后重裝,按照上面教程再來一遍;部分內容有更正。特別注意!
2、如果你之前裝了,報錯之后就一直放在那里,現在請嚴格按照下面步驟進行:
a. 打開cmd,切換到mysql的bin目錄下,輸入命令 net stop mysql,停止mysql服務;
b. 打開mysql的安裝目錄,找到data文件夾,將其刪除!
c. 回到cmd命令窗口,輸入mysqld -remove
d. 接下來按照上面教程,從第二步生成data文件開始執行,一定要注意修改密碼那里:
mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
然后就可以愉快使用密碼登錄mysql了。
確保有安裝mysql之后,我們就來創建數據庫:
1、ctrl+r 快捷鍵,打開運行窗口,輸入cmd,點擊確定
2、命令行里輸入:
mysql -uroot -p123456
create database proName
mysql -uroot -p123456 創建一個數據庫,用戶名為root,密碼為123456
proName 為表名
另外可以使用 create database 數據庫名; 創建數據庫。
create database MyDB_one;3、如果想在命令行里執行 mysql命令(非必須,根據自己需要),則需要配置環境變量
我的電腦–》屬性—》高級系統設置–》環境變量–》新建環境變量
變量名:MYSQL_HOME
變量值:E:\soft\after\mysql-8.0.18-winx64\ (此為你mysql的安裝路徑。可從服務的屬性里查看)
配置setting 文件
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql',# 'NAME': os.path.join(BASE_DIR, 'db.mysql'),'NAME': 'proName','USER': 'root','PASSWORD': '123456','HOST': '127.0.0.1','PORT': '3306',} }###這樣的方法有一個弊端就是你的數據庫和密碼都暴露出來了,有很大的安全隱患,所以建議大家用下面的這種方法,提前配置好用戶名和密碼。
首先,在終端打開配置的文件:sudo vim ~/.bashrc
在文件的末尾加上兩行:export DATABASE_PWD = 用戶密碼
接著,我們在去settings.py文件中導入一個包:from os import environ
最后,在我們配置數據的位置,配置數據,只是這次可以把用戶名和密碼用其他方式代替。
至此,就完成了配置
使用pymysql模塊連接mysql數據庫
python環境默認模塊MySQLdb只適用于python2.x,pip裝不上。它在python3版本的替代品是pymysql:import pymysql
即 Python3不支持MySQLdb,可用pymysql代替
因此:
將Django默認使用MySQLdb連接數據庫 更改為 使用pymysql連接數據庫
習慣在與項目同名的文件夾下的 init.py 文件中添加
import pymysql pymysql.install_as_MySQLdb()安裝命令僅供參考:
pip install mysqlclient
pip install pymysql (如果使用python3.x版本時,用pymysql替換MySQLdb,或者用mysqlclient替換MySQLdb。)
Python3.x版本:Pip install mysqlclient
Python2.x 版本:pip install mysql-python
配置完成,以下步驟為數據遷移
在app下的models.py下寫model
ORM是通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關系數據庫中
體現在django中就是在models.py中,書寫類,創建表數據
對應關系如下:
類 —》 表
對象 —》 數據行(記錄)
屬性 —》 字段
參考鏈接:
https://www.cnblogs.com/maple-shaw/articles/9323320.html
執行數據庫遷移的命令
python manage.py makemigrations #為改動創建遷移記錄; python manage.py migrate #將操作同步到數據庫。MySQL創建數據庫和創建數據表
MySQL 創建數據庫和創建數據表
MySQL 是最常用的數據庫,在數據庫操作中,基本都是增刪改查操作,簡稱CRUD。
在這之前,需要先安裝好 MySQL ,然后創建好數據庫、數據表、操作用戶。
一、數據庫操作語言
數據庫在操作時,需要使用專門的數據庫操作規則和語法,這個語法就是 SQL(Structured Query Language) 結構化查詢語言。
SQL 的主要功能是和數據庫建立連接,進行增刪改查的操作。SQL是關系型數據庫管理系統的標準語言。
SQL 語言的作用:
數據定義語言 DDL(Data Definition Language) 。用于創建數據庫,數據表。
數據操作語言 DML(Data Manipulation Language) 。用于從數據表中插入、修改、刪除數據。
數據查詢語言 DQL(Data Query Language) 。用于從數據表中查詢數據。
數據控制語言 DCL(Data Control Language) 。用來設置或修改數據庫用戶或角色的權限。
使用 SQL 操作數據庫時,所有的 SQL 語句都以分號結束。(切換數據庫時可以不用分號)
在 SQL 語句中,不區分大小寫,編寫 SQL 語句時可以根據情況用大小寫的區別來增加可讀性。
二、創建數據庫
輸入 mysql -u root -p 命令,回車,然后輸入 MySQL 的密碼(不要忘記了密碼),再回車,就連接上 MySQL 了。
mysql -u root -p最初,都是使用 root 用戶登錄,工作中如果一直用 root 用戶登錄,因為權限太大,風險是很大的,所以等創建好權限適合的用戶后,就不要經常登錄 root 用戶了。
使用 show databases; 查看當前安裝的 MySQL 中有哪些數據庫。
show databases;
剛安裝 MySQL 時,默認有四個數據庫,information_schema,mysql,perfomance_schema,sys 。通常情況下,我們不會直接使用這四個數據庫,但千萬不要把這四個數據庫刪了,否則會帶來很多不必要的麻煩。如果不小心刪了,建議是重新安裝 MySQL ,在重裝之前把自己的數據遷移出來備份好,或者從其他服務器上遷移一個相同的數據庫過來。
使用 create database 數據庫名; 創建數據庫。
create database MyDB_one;
創建數據庫成功后,數據庫的數量變成了5個,多了剛才創建的 MyDB_one 。
使用 create database 數據庫名 character set utf8; 創建數據庫并設置數據庫的字符編碼。
create database MyDB_two character set utf8;
直接創建的數據庫,數據庫的編碼方式是 MySQL 默認的編碼方式 latin1 (單字節編碼) ,通常我們會在數據庫中存放中文數據,所以最好把數據庫的編碼方式設置成 utf-8 ,這樣中文才能正常顯示。
character set 可以縮寫成 charset ,效果是一樣的。
使用 show create database 數據庫名; 顯示數據庫的創建信息。
show create database MyDB_one; show create database MyDB_two;
如果不知道一個數據庫的編碼方式是什么,可以使用 show create database 數據庫名 來查看數據庫的編碼方式。可以看到剛才創建的 MyDB_one 的編碼方式是 MySQL 的默認編碼 latin1 ,MyDB_two 的編碼方式是 utf-8 。
當然,這種方式不能在創建的同時顯示,只能查看一個已經存在的數據庫的編碼方式。
如果一個數據庫的編碼方式不符合使用需求,可以進行修改。剛才創建的 MyDB_one 經過修改后,編碼方式也變成了 utf-8 。
使用 use 數據庫名 進入或切換數據庫。
use MyDB_one use MyDB_two;
剛連接上 MySQL 時,沒有處于任何一個數據庫中,如果要使用某一個數據庫,就需要進入到這個數據庫中。
use 數據庫名 這個命令后面的分號可以省略,這是 SQL 語句中唯一可以省略分號的語句。
創建數據表
使用 show tables;查看當前數據庫中有哪些表。
show tables;
在剛才創建的數據庫 MyDB_one 中,還沒有創建任何表,所以當前是空的。
使用 create table 表名(字段1 字段類型,字段2 字段類型,字段3 字段類型,…); 來創建一張表。
create table Phone_table(pid INT, name CHAR(20), price INT);
在 MyDB_one 中創建了一個叫 Phone_table 的數據表,這張表有三個字段 pid,name,price 。為了增加 SQL 的可讀性,字段名我用的是小寫,字段類型用大寫。
用 show create table 表名; 來顯示已創建的表的信息。
show create table Phone_table;
使用 show create table 表名; 可以顯示表的字段信息, MySQL 的引擎,和默認的字符編碼等信息。與顯示數據庫信息一樣,show 只能顯示已經創建了的數據表的信息,不能在創建的同時顯示信息。
如果想更好地展示表的字段信息,可以使用 desc 表名; 來顯示表的字段信息。
使用 alter table 表名 add 字段名 數據類型; 為已存在的表添加一個新字段。
alter table Phone_table add color CHAR(20);
其他詳細的MySQL創建數據庫好數據表參考鏈接:https://blog.csdn.net/weixin_43790276/article/details/102655786
總結
通過以上的資料,可以搭建出一個簡單的Django網頁,輸出“HelloWord”,解決了Django項目的部署流程以及關系型數據庫MySQL與Django配置的問題,對Django搭建網頁有了基本的認識!
總結
以上是生活随笔為你收集整理的Python后端---使用Django+Mysql搭建一个简单的网站的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机软件设定到期,Excel应用——合
- 下一篇: linux cmake编译源码,linu