成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

利用Django開(kāi)發(fā)個(gè)小型商城(一)

RobinTang / 444人閱讀

摘要:利用開(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

{% csrf_token %}
輸入錯(cuò)誤
輸入錯(cuò)誤
忘記密碼

這里說(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

相關(guān)文章

  • Python測(cè)試開(kāi)發(fā)Django和Flask框架的區(qū)別

    摘要:在談中框架和框架的區(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...

    B0B0 評(píng)論0 收藏0
  • Django3商城項(xiàng)目 從0到1 【五】商品信息模塊

    摘要:文章目錄商品列表頁(yè)邏輯代碼商品列表頁(yè)的數(shù)據(jù)渲染商品詳細(xì)頁(yè)實(shí)現(xiàn)商品收藏商品列表頁(yè)邏輯代碼的定義視圖函數(shù)商品列表獲取請(qǐng)求參數(shù)變量是商品搜索功能的關(guān)鍵字,它與模型的字段進(jìn)行模糊匹配,因此查詢條件為。 ...

    Vixb 評(píng)論0 收藏0
  • Django3商城項(xiàng)目 從0到1 【四】數(shù)據(jù)渲染與展示

    摘要:文章目錄基礎(chǔ)模板設(shè)計(jì)首頁(yè)模板設(shè)計(jì)和的定義相應(yīng)的視圖函數(shù)配置媒體資源的路由信息基礎(chǔ)模板設(shè)計(jì)在項(xiàng)目的文件夾新建文件該文件用于存放每個(gè)網(wǎng)頁(yè)頂部的代碼母嬰商城請(qǐng)輸入需要的商品 ...

    qiangdada 評(píng)論0 收藏0
  • 史上最詳細(xì)Python學(xué)習(xí)路線-從入門到精通,只需90天

    摘要:針對(duì)的初學(xué)者,從無(wú)到有的語(yǔ)言如何入門,主要包括了的簡(jiǎn)介,如何下載,如何安裝,如何使用終端,等各種開(kāi)發(fā)環(huán)境進(jìn)行開(kāi)發(fā),中的語(yǔ)法和基本知識(shí)概念和邏輯,以及繼續(xù)深入學(xué)習(xí)的方法。 ...

    gghyoo 評(píng)論0 收藏0
  • Hello django

    摘要:最近迷上了雖然本人是搞的,但是被的快速簡(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...

    fsmStudy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<