摘要:利用開(kāi)發(fā)個(gè)小型商城我們本期的教程是教大家如何利用開(kāi)發(fā)一個(gè)小型的商城這里所說(shuō)的小型商城只是功能上的簡(jiǎn)樸。并于年月在許可證下發(fā)布。這套框架是以比利時(shí)的吉普賽爵士吉他手來(lái)命名的。是重量級(jí)選手中最有代表性的一位。
利用Django開(kāi)發(fā)個(gè)小型商城
我們本期的教程是教大家如何利用Django開(kāi)發(fā)一個(gè)小型的商城,這里所說(shuō)的小型商城只是功能上的簡(jiǎn)樸。
作者:黃志成(小黃)
作者博客:博客地址
前提1.了解基本的Python3語(yǔ)法 2.會(huì)使用百度
這里我們不講最基礎(chǔ)的語(yǔ)法部分,如果沒(méi)有基礎(chǔ)的朋友,建議先了解基礎(chǔ).
當(dāng)然對(duì)有基礎(chǔ)的朋友,也有要求就是會(huì)使用百度來(lái)解決問(wèn)題.為什么這么說(shuō)?
很多時(shí)候新手遇到的問(wèn)題 90% 都是在百度上能搜索到的. 遇到問(wèn)題的第一時(shí)刻應(yīng)該仔細(xì)思考,然后在去百度,如果百度上的答案不能理解,要么是你的基本功還是不扎實(shí),另外就是答案是不對(duì),或者沒(méi)有表達(dá)清楚,這個(gè)時(shí)候 你可以去一些編程社區(qū)去求助.
Django 簡(jiǎn)介1.Django是什么?
Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫成。采用了MTV的框架模式,即模型M,模板T和視圖V。它最初是被開(kāi)發(fā)來(lái)用于管理勞倫斯出版集團(tuán)旗下的一些以新聞內(nèi)容為主的網(wǎng)站的,即是CMS(內(nèi)容管理系統(tǒng))軟件。并于2005年7月在BSD許可證下發(fā)布。這套框架是以比利時(shí)的吉普賽爵士吉他手Django Reinhardt來(lái)命名的。
Django是重量級(jí)選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django
當(dāng)然python的web框架有很多 例如: Tornado、flask、web2py 等等.
各有優(yōu)點(diǎn).像Django就是一個(gè)重量級(jí)的框架,他將很多功能都集成好了,開(kāi)發(fā)很便捷.適合入門學(xué)習(xí).
下面用一張圖來(lái)說(shuō)明什么是Django:
這部電影相信大家都看過(guò),這是傳說(shuō)中要你命3000.我們的Django框架和它一樣.是一個(gè)很全的工具.用Django 我們可以快速開(kāi)發(fā)出一個(gè)web APP.
2.MTV又是什么?
Model(模型):用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)及對(duì)數(shù)據(jù)的處理方法,是Web應(yīng)用程序中用于處理應(yīng)用程序的數(shù)據(jù)邏輯的部分,Model只提供功能性的接口,通過(guò)這些接口可以獲取Model的所有功能。白話說(shuō),這個(gè)模塊就是Web框架和數(shù)據(jù)庫(kù)的交互層。
Template(模板):將數(shù)據(jù)與HTML語(yǔ)言結(jié)合起來(lái)的引擎
View(視圖): 負(fù)責(zé)實(shí)際的業(yè)務(wù)邏輯實(shí)現(xiàn)
Django的安裝Django是python編寫的web框架,依賴于python 這里我們使用python3.6,使用的Django版本是2.0 ,這里2.0版本不在兼容python2.7
這里我們通過(guò)pip安裝Django
pip3 install django==2.0
這里指定安裝Django的2.0版本
安裝完成之后,如何驗(yàn)證是否安裝成功呢? 這里我們通過(guò)pip查看已安裝的包
pip3 list
當(dāng)然還有一種方法 ,在python環(huán)境下運(yùn)行下面代碼獲取django的版本號(hào).
>>> import django >>> django.get_version() "2.0"
django的安裝其實(shí)很簡(jiǎn)單.下面我們將一步一步的創(chuàng)建一個(gè)商城項(xiàng)目.
Django的項(xiàng)目創(chuàng)建在我們安裝好Django之后,我們的環(huán)境變量中會(huì)有一個(gè) django-admin
在命令行下面輸入 django-admin help 如果正常的話 會(huì)出現(xiàn)如下界面:
既然一切正常,我們就開(kāi)始創(chuàng)建第一個(gè)Django的項(xiàng)目吧.
通過(guò)下面的命令就可以創(chuàng)建一個(gè) 名稱為 fresh的項(xiàng)目
django-admin startproject fresh
下面是通過(guò)此命令創(chuàng)建的目錄結(jié)構(gòu).
├── fresh │ ├── __init__.py │ ├── settings.py (項(xiàng)目配置文件) │ ├── urls.py (項(xiàng)目路由) │ └── wsgi.py (python網(wǎng)關(guān)) ├── manage.py (腳手架) ├── db.sqlite3 (數(shù)據(jù)庫(kù)) └── templates (模板目錄)
當(dāng)然我們也可以通過(guò)IDE創(chuàng)建Django項(xiàng)目 (這里我們使用PyCharm)
點(diǎn)擊 Create 就能創(chuàng)建出一個(gè)Django的項(xiàng)目,其實(shí)IDE也是底層調(diào)用 django-admin的方法創(chuàng)建項(xiàng)目.創(chuàng)建出的文件都是一樣的.
這個(gè)時(shí)候我們運(yùn)行一下我們項(xiàng)目試試,可以通過(guò)內(nèi)置的服務(wù)器啟動(dòng)項(xiàng)目
python3 manage.py runserver 8000
這就啟動(dòng)成功了. 我們 打開(kāi)瀏覽器訪問(wèn) http://127.0.0.1:8000/
顯示這樣的,我們就很順利的創(chuàng)建了一個(gè)項(xiàng)目.當(dāng)然啟動(dòng)時(shí)報(bào)出的紅色錯(cuò)誤信息,我們會(huì)在后面來(lái)和大家解釋.
在創(chuàng)建第一個(gè)應(yīng)用之前我們先了解一下 Django的配置文件 **settings
.py**
在Django中默認(rèn)使用的數(shù)據(jù)庫(kù)是sqlite.在實(shí)際的業(yè)務(wù)中并不常用,這里我們使用mysql.當(dāng)然如果對(duì)數(shù)據(jù)庫(kù)這里不太了解的同學(xué),建議先去學(xué)習(xí)一下數(shù)據(jù)庫(kù)相關(guān)的知識(shí).
那如何將數(shù)據(jù)庫(kù)引擎換成mysql呢?
# 這段代碼在 settings.py的 76行 DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": os.path.join(BASE_DIR, "db.sqlite3"), } }
將這段改為:
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "HOST": "127.0.0.1", "PORT":"3306", "USER":"root", "PASSWORD":"root", "NAME":"fresh", } }
我們?cè)囍\(yùn)行一下,可能會(huì)報(bào)一個(gè)錯(cuò)誤
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient?
因?yàn)樵?Django 中, 連接數(shù)據(jù)庫(kù)時(shí)使用的是 MySQLdb 庫(kù),這在與 python3 的合作中就會(huì)報(bào)上面的錯(cuò)誤了.
如何解決呢?
1.在 python3 中,改變了連接庫(kù),改為了 pymysql 庫(kù),使用pip install pymysql 進(jìn)行安裝
2.然后在 __init__.py 文件中添加以下代碼即可
import pymysql pymysql.install_as_MySQLdb()
Django支持的數(shù)據(jù)庫(kù)有這幾種:
"django.db.backends.postgresql" "django.db.backends.mysql" "django.db.backends.sqlite3" "django.db.backends.oracle"
這節(jié)的最后說(shuō)下我們的靜態(tài)頁(yè)面和靜態(tài)文件(CSS,JS,IMG)存放位置吧.
在setting.py的最后有如下代碼.告訴我們文件存放位置.
STATIC_URL = "/static/" STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ] TEMPLATE_DIRS = (os.path.join(BASE_DIR, "templates"),)
靜態(tài)文件 存在 static 目錄下. 可能在創(chuàng)建項(xiàng)目的時(shí)候 沒(méi)有自動(dòng)幫我們創(chuàng)建static文件夾,需要自己手動(dòng)創(chuàng)建一下,創(chuàng)建在和manage.py同級(jí)目錄。
靜態(tài)頁(yè)面存放在 templates 下.
創(chuàng)建第一個(gè)應(yīng)用對(duì)于很多初學(xué)的同學(xué),就有一個(gè)疑問(wèn)? 項(xiàng)目和應(yīng)用有著什么樣的關(guān)聯(lián)和區(qū)別.
一個(gè)app實(shí)現(xiàn)某個(gè)功能或者模塊,比如用戶模塊,訂單模塊;
一個(gè)project是配置文件和多個(gè)app的集合,這些app組合成整個(gè)站點(diǎn);
一個(gè)project可以包含多個(gè)app;
我們來(lái)創(chuàng)建第一應(yīng)用:用戶模塊 ,用于用戶的登錄,注冊(cè)。
python3 manage.py startapp user
創(chuàng)建完應(yīng)用,我們來(lái)設(shè)計(jì)模型類。
在user文件夾下有一個(gè)models.py的文件,這里就是模型類.在這里我們先定義我們的字段.
class User(models.Model): uid = models.AutoField(primary_key=True) uname = models.CharField(max_length=20) upwd = models.CharField(max_length=32) create_at = models.DateField() update_at = models.DateField()
定義完字段后,就可以進(jìn)行遷移了.遷移方式在下方寫著.
#創(chuàng)建數(shù)據(jù)遷移文件 python3 manage.py makemigrations #如果出現(xiàn) No changes detected ,可能是你沒(méi)有把應(yīng)用添加到 setting.py中的 INSTALLED_APPS , 應(yīng)用名是 "user" #生成 python3 manage.py migrate
生成表后在數(shù)據(jù)庫(kù)中一看.表名是:user_user 這和我們想的不太一樣.
那如何修改成user呢.
#在User類中添加 Meta類 class User(models.Model): uid = models.AutoField(primary_key=True) uname = models.CharField(max_length=20) upwd = models.CharField(max_length=32) create_at = models.DateField() update_at = models.DateField() class Meta: db_table = "user"
第一步:
進(jìn)入數(shù)據(jù)庫(kù),找到django_migrations的表,刪除該app名字對(duì)應(yīng)的所有記錄。
第二步:
刪除該app名字下的migrations下的除了__init__.py之外的文件。
第三步:
重新運(yùn)行遷移命令.
數(shù)據(jù)表創(chuàng)建好了,現(xiàn)在需要我們的頁(yè)面了,Django如何載入頁(yè)面呢?
在view.py文件下就可以創(chuàng)建咱們的視圖邏輯了.
這里咱們使用類的方式來(lái)寫,當(dāng)然也可以用函數(shù)的方式來(lái)寫 這里我更推薦使用類的方式.
用戶訪問(wèn)瀏覽器,一般兩種方式,get獲取網(wǎng)頁(yè)和post提交數(shù)據(jù),get也可以提交數(shù)據(jù),以一種明文形式顯示在url中,post提交的數(shù)據(jù)url中不顯示,一種安全的數(shù)據(jù)提交方式,get方式提交數(shù)據(jù)一般應(yīng)用于一些排序方式和類別過(guò)濾中,post用于用戶提交的表單數(shù)據(jù),比較隱私的數(shù)據(jù),get方式提交數(shù)據(jù)為小數(shù)據(jù)信息,而post方式提交數(shù)據(jù)可以是大數(shù)據(jù)信息
導(dǎo)入View基類
寫一個(gè)view類,繼承View基類,下面有兩個(gè)方法,get和post方法
在urls中通過(guò)類方法.as_view() 方式 調(diào)用這個(gè)view類
下面給出代碼實(shí)例:
import json from django.shortcuts import render,HttpResponse from django.views.generic.base import View # Create your views here. class LoginView(View): def get(self,request): # 渲染登錄頁(yè)面 return render(request,"user/login.html") def post(self,request): # 登錄邏輯 return HttpResponse(json.dumps(request.POST)) class RegisterView(View): def get(self,request): return render(request,"user/register.html")
這里先寫登錄頁(yè)面和注冊(cè)頁(yè)面. 登錄的post方法中 在頁(yè)面先直接輸出 POST 的數(shù)據(jù).
由于django會(huì)有CSRF驗(yàn)證所以我們?cè)谔峤槐韱蔚臅r(shí)候要構(gòu)建一個(gè)csrf的token,這里django提供了方法讓我們直接構(gòu)建出一條token
這里說(shuō)一下 render 和 HttpResponse函數(shù)的作用.
render是渲染變量到模板中,render的第一個(gè)參數(shù)是request 第二個(gè)參數(shù)是模板路徑 第三個(gè)參數(shù)context是要傳入文件中用于渲染呈現(xiàn)的數(shù)據(jù), 默認(rèn)是字典格式
HttpResponse是不調(diào)用模板,直接返回?cái)?shù)據(jù)
最后我們需要添加路由, 路由是關(guān)聯(lián)url及其處理函數(shù)關(guān)系的過(guò)程
在 user 模塊下 新建urls.py文件
from django.urls import path from user.views import LoginView,RegisterView urlpatterns = [ path(r"user_login/",LoginView.as_view(),name="login"), path(r"user_register/",RegisterView.as_view(),name="register") ]
最后在項(xiàng)目的urls.py文件中引入 user模塊的路由
from django.contrib import admin from django.urls import path,include urlpatterns = [ path("admin/", admin.site.urls), path("",include("user.urls")), ]
下一節(jié),我們開(kāi)始講解django的模型,來(lái)完善我們的用戶模塊.實(shí)現(xiàn)用戶登錄注冊(cè)的功能。
希望喜歡的朋友們 給一個(gè)贊~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41557.html
摘要:在談中框架和框架的區(qū)別之前,我們需要先探討如下幾個(gè)問(wèn)題。通過(guò)大數(shù)據(jù)統(tǒng)計(jì)分析全球著名的網(wǎng)站對(duì)和這兩個(gè)框架的調(diào)查分析。從全球著名的代碼托管平臺(tái)上的和數(shù)量上分別為,分別為。 在談Python中Django框架和Flask框架的區(qū)別之前,我們需要先探討如下幾個(gè)問(wèn)題。 一、為什么要使用框架? showImg(https://segmentfault.com/img/remote/14600000...
摘要:文章目錄商品列表頁(yè)邏輯代碼商品列表頁(yè)的數(shù)據(jù)渲染商品詳細(xì)頁(yè)實(shí)現(xiàn)商品收藏商品列表頁(yè)邏輯代碼的定義視圖函數(shù)商品列表獲取請(qǐng)求參數(shù)變量是商品搜索功能的關(guān)鍵字,它與模型的字段進(jìn)行模糊匹配,因此查詢條件為。 ...
摘要:文章目錄基礎(chǔ)模板設(shè)計(jì)首頁(yè)模板設(shè)計(jì)和的定義相應(yīng)的視圖函數(shù)配置媒體資源的路由信息基礎(chǔ)模板設(shè)計(jì)在項(xiàng)目的文件夾新建文件該文件用于存放每個(gè)網(wǎng)頁(yè)頂部的代碼母嬰商城請(qǐng)輸入需要的商品 ...
摘要:針對(duì)的初學(xué)者,從無(wú)到有的語(yǔ)言如何入門,主要包括了的簡(jiǎn)介,如何下載,如何安裝,如何使用終端,等各種開(kāi)發(fā)環(huán)境進(jìn)行開(kāi)發(fā),中的語(yǔ)法和基本知識(shí)概念和邏輯,以及繼續(xù)深入學(xué)習(xí)的方法。 ...
摘要:最近迷上了雖然本人是搞的,但是被的快速簡(jiǎn)潔深深折服特此獻(xiàn)上本人與的之旅,見(jiàn)笑環(huán)境本文后續(xù)更新請(qǐng)查看開(kāi)始創(chuàng)建項(xiàng)目打開(kāi)終端命令,沒(méi)有消息就是好消息,此時(shí)已經(jīng)成功創(chuàng)建項(xiàng)目。 最近迷上了django(雖然本人是搞java的^_^),但是被django的快速、簡(jiǎn)潔深深折服特此獻(xiàn)上本人與django的hello world之旅,見(jiàn)笑! 環(huán)境:MacOS+python2.7+Django 1.9.5...
閱讀 3197·2021-11-23 09:51
閱讀 1537·2021-11-22 09:34
閱讀 2846·2021-10-27 14:15
閱讀 2301·2021-10-12 10:17
閱讀 1900·2021-10-12 10:12
閱讀 963·2021-09-27 14:00
閱讀 2009·2021-09-22 15:19
閱讀 1042·2019-08-30 10:51