利用Django開發個小型商城(一)

利用Django開發個小型商城

咱們本期的教程是教你們如何利用Django開發一個小型的商城,這裏所說的小型商城只是功能上的簡樸。html

做者:黃志成(小黃)python

做者博客:博客地址mysql

前提

1.瞭解基本的Python3語法

2.會使用百度

這裏咱們不講最基礎的語法部分,若是沒有基礎的朋友,建議先了解基礎.web

固然對有基礎的朋友,也有要求就是會使用百度來解決問題.爲何這麼說?sql

不少時候新手遇到的問題 90% 都是在百度上能搜索到的. 遇到問題的第一時刻應該仔細思考,而後在去百度,若是百度上的答案不能理解,要麼是你的基本功仍是不紮實,另外就是答案是不對,或者沒有表達清楚,這個時候 你能夠去一些編程社區去求助.數據庫

Django 簡介

1.Django是什麼?django

Django是一個開放源代碼的Web應用框架,由Python寫成。採用了MTV的框架模式,即模型M,模板T和視圖V。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容爲主的網站的,便是CMS(內容管理系統)軟件。並於2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。

Django是重量級選手中最有表明性的一位。許多成功的網站和APP都基於Django編程

固然python的web框架有不少 例如: Tornado、flask、web2py 等等.json

各有優勢.像Django就是一個重量級的框架,他將不少功能都集成好了,開發很便捷.適合入門學習.flask

下面用一張圖來講明什麼是Django:

image

這部電影相信你們都看過,這是傳說中要你命3000.咱們的Django框架和它同樣.是一個很全的工具.用Django 咱們能夠快速開發出一個web APP.

2.MTV又是什麼?

Model(模型)用於封裝與應用程序的業務邏輯相關的數據及對數據的處理方法,是Web應用程序中用於處理應用程序的數據邏輯的部分,Model只提供功能性的接口,經過這些接口能夠獲取Model的全部功能。白話說,這個模塊就是Web框架和數據庫的交互層。

Template(模板)將數據與HTML語言結合起來的引擎

View(視圖): 負責實際的業務邏輯實現

Django的安裝

Django是python編寫的web框架,依賴於python 這裏咱們使用python3.6,使用的Django版本是2.0 ,這裏2.0版本不在兼容python2.7

這裏咱們經過pip安裝Django

pip3 install django==2.0

這裏指定安裝Django的2.0版本

安裝完成以後,如何驗證是否安裝成功呢? 這裏咱們經過pip查看已安裝的包

pip3 list

固然還有一種方法 ,在python環境下運行下面代碼獲取django的版本號.

>>> import django
>>> django.get_version()
'2.0'

django的安裝其實很簡單.下面咱們將一步一步的建立一個商城項目.

Django的項目建立

在咱們安裝好Django以後,咱們的環境變量中會有一個 django-admin

在命令行下面輸入 django-admin help 若是正常的話 會出現以下界面:

image

既然一切正常,咱們就開始建立第一個Django的項目吧.

經過下面的命令就能夠建立一個 名稱爲 fresh的項目

django-admin startproject fresh

下面是經過此命令建立的目錄結構.

├── fresh
│   ├── __init__.py
│   ├── settings.py (項目配置文件)
│   ├── urls.py (項目路由)
│   └── wsgi.py (python網關)
├── manage.py (腳手架)
├── db.sqlite3 (數據庫)
└── templates (模板目錄)

固然咱們也能夠經過IDE建立Django項目 (這裏咱們使用PyCharm)

image

點擊 Create 就能建立出一個Django的項目,其實IDE也是底層調用 django-admin的方法建立項目.建立出的文件都是同樣的.

這個時候咱們運行一下咱們項目試試,能夠經過內置的服務器啓動項目

python3 manage.py runserver 8000

image

這就啓動成功了. 咱們 打開瀏覽器訪問 http://127.0.0.1:8000/

image

顯示這樣的,咱們就很順利的建立了一個項目.固然啓動時報出的紅色錯誤信息,咱們會在後面來和你們解釋.

在建立第一個應用以前咱們先了解一下 Django的配置文件 **settings
.py**

在Django中默認使用的數據庫是sqlite.在實際的業務中並不經常使用,這裏咱們使用mysql.固然若是對數據庫這裏不太瞭解的同窗,建議先去學習一下數據庫相關的知識.

那如何將數據庫引擎換成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',
    }
}

咱們試着運行一下,可能會報一個錯誤

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

由於在 Django 中, 鏈接數據庫時使用的是 MySQLdb 庫,這在與 python3 的合做中就會報上面的錯誤了.

如何解決呢?

1.在 python3 中,改變了鏈接庫,改成了 pymysql 庫,使用pip install pymysql 進行安裝

2.而後在 __init__.py 文件中添加如下代碼便可

import pymysql
pymysql.install_as_MySQLdb()

Django支持的數據庫有這幾種:

'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'

這節的最後說下咱們的靜態頁面和靜態文件(CSS,JS,IMG)存放位置吧.

在setting.py的最後有以下代碼.告訴咱們文件存放位置.

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

TEMPLATE_DIRS = (os.path.join(BASE_DIR,  'templates'),)

靜態文件 存在 static 目錄下. 可能在建立項目的時候 沒有自動幫咱們建立static文件夾,須要本身手動建立一下,建立在和manage.py同級目錄。

靜態頁面存放在 templates 下.

建立第一個應用

對於不少初學的同窗,就有一個疑問? 項目和應用有着什麼樣的關聯和區別.

  • 一個app實現某個功能或者模塊,好比用戶模塊,訂單模塊;
  • 一個project是配置文件和多個app的集合,這些app組合成整個站點;
  • 一個project能夠包含多個app;

咱們來建立第一應用:用戶模塊 ,用於用戶的登陸,註冊。

python3 manage.py startapp user

建立完應用,咱們來設計模型類。

在user文件夾下有一個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()

定義完字段後,就能夠進行遷移了.遷移方式在下方寫着.

#建立數據遷移文件
python3 manage.py makemigrations

#若是出現 No changes detected ,多是你沒有把應用添加到 setting.py中的 INSTALLED_APPS , 應用名是 'user'

#生成
python3 manage.py migrate

生成表後在數據庫中一看.表名是: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'

第一步:
進入數據庫,找到django_migrations的表,刪除該app名字對應的全部記錄。

第二步:

刪除該app名字下的migrations下的除了__init__.py以外的文件。

第三步:

從新運行遷移命令.

數據表建立好了,如今須要咱們的頁面了,Django如何載入頁面呢?

在view.py文件下就能夠建立我們的視圖邏輯了.

這裏我們使用類的方式來寫,固然也能夠用函數的方式來寫 這裏我更推薦使用類的方式.

  1. 用戶訪問瀏覽器,通常兩種方式,get獲取網頁和post提交數據,get也能夠提交數據,以一種明文形式顯示在url中,post提交的數據url中不顯示,一種安全的數據提交方式,get方式提交數據通常應用於一些排序方式和類別過濾中,post用於用戶提交的表單數據,比較隱私的數據,get方式提交數據爲小數據信息,而post方式提交數據能夠是大數據信息
  2. 導入View基類
  3. 寫一個view類,繼承View基類,下面有兩個方法,get和post方法
  4. 在urls中經過類方法.as_view() 方式 調用這個view類

下面給出代碼實例:

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):
        # 渲染登陸頁面
        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')

這裏先寫登陸頁面和註冊頁面. 登陸的post方法中 在頁面先直接輸出 POST 的數據.

因爲django會有CSRF驗證因此咱們在提交表單的時候要構建一個csrf的token,這裏django提供了方法讓咱們直接構建出一條token

<form action="" method="post">
    {% csrf_token %}
    <input type="text" name="username" class="name_input" placeholder="請輸入用戶名">
    <div class="user_error">輸入錯誤</div>
    <input type="password" name="pwd" class="pass_input" placeholder="請輸入密碼">
    <div class="pwd_error">輸入錯誤</div>
    <div class="more_input clearfix">
        <input type="checkbox" name="">
        <label>記住用戶名</label>
        <a href="#">忘記密碼</a>
    </div>
    <input type="submit" name="" value="登陸" class="input_submit">
</form>

這裏說一下 render 和 HttpResponse函數的做用.

render是渲染變量到模板中,render的第一個參數是request 第二個參數是模板路徑 第三個參數context是要傳入文件中用於渲染呈現的數據, 默認是字典格式

HttpResponse是不調用模板,直接返回數據

最後咱們須要添加路由, 路由是關聯url及其處理函數關係的過程

在 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')
]

最後在項目的urls.py文件中引入 user模塊的路由

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('user.urls')),
]

下一節,咱們開始講解django的模型,來完善咱們的用戶模塊.實現用戶登陸註冊的功能。

但願喜歡的朋友們 給一個贊~

相關文章
相關標籤/搜索