python web 開發 - Django 入門

開篇

經過上一篇 python 入門實戰 - 學生管理系統 練習了一把 python 語法。本篇總結下 Django 這個 web 框架的入門使用。前提是要有相關的 web 開發經驗(Java, php等)。由於本文不會涉及 http 協議,先後端分離不分離等概念。php

另附:css

  1. 官方教程: https://docs.djangoproject.com/en/3.0/intro/tutorial02/
  2. 菜鳥教程: https://www.runoob.com/django/django-tutorial.html

正文

本人開發環境

  • 操做系統: MacOS
  • IDE: vscode
  • 數據庫: mysql
  • python 版本 3.x

準備工做

  1. 安裝 django (非 maOS 操做系統 請參考開篇的教程選擇安裝方式,以及驗證是否安裝成功)html

    python3 -m pip install django==1.11.6
  2. 建立項目python

    django-admin startproject helloworld(這個是項目名)

圖中標記了 4 個地方
1. 建立完 helloworld 項目後,會發現helloworld 下面還有一個 helloworld, 後面說到的 helloworld 通常都是第一層級,簡稱項目根目錄
2. settings.py 主要是一些配置,好比數據庫,靜態文件存放位置等
3. urls.py 主要配置 url 和 函數的映射關係
4. manage.py 提供用來管理項目的命令,好比啓動項目,後面請多留意
  1. 進入項目根目錄mysql

    cd helloworld
  2. 啓動項目,並訪問web

(這裏會啓動失敗,緣由是 python3 和 django 的兼容問題,反正我用的 django 版本存在這個問題,解決方式就是刪除某個文件的一個 逗號,若是碰見了,百度一搜就明白了,具體內容當初忘記保存了)sql

python3 manage.py runserver
    // 固然也能夠指定ip:host
    python3 manage.py runserver localhost:8080

  1. 至此一個 web 項目雛形已經有了

繼續完善

至此咱們就能夠自行開發 web 應用了,可是你也許還會問數據庫

  1. http 請求調用的函數寫在哪裏,以及函數 和 頁面的映射關係如何體現
  2. 靜態文件的存放位置

下面就新建的 helloword 項目進行講解django

問題 1. 函數及其映射關係後端

找到 helloworld/helloworld/ 下面有個 urls.py 文件

默認配置:

from django.conf.urls import url
    from django.contrib import admin
   
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
    ]

修改後:

from django.conf.urls import url

    from django.contrib import admin

    # 下面是新增的
    from django.shortcuts import HttpResponse, render, redirect

    # 1. 跳轉頁面
    # render 表示 訪問 http://localhost:8000/index 會跳轉到 index.html 頁面
    def index(request):
        return render(request, 'index.html')

    # 2. 跳轉頁面,並攜帶參數
    def index02(request):
        return render(request, 'index.html', {'參數名', 值})
        
    # 3. 重定向
    def index03(request):
        return redirect('/index/')
        
    # 4. 接收參數
    def index04(request):
        # 接收 post 請求參數
        request.POST.get('參數名')
        # 接收 get 請求參數
        request.GET.get('參數名')
        return render(request, 'index.html')     
    
    # 配置 url 映射
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        # 配置 url 映射
        # 訪問 http://localhost:8000/index/ 就會調用上面的 index 函數
        url(r'^index/', index), 
        
        # TODO 省略 index02, index03, index 04 映射配置
    ]
  1. 靜態文件存放位置

找到 helloworld/helloworld/ 下面有個 settings.py 文件

html 文件配置: 大概 50 多行的位置

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
     
    # 修改這個配置項以下
    # 而後在項目根目錄下,新建 templates 目錄,用於存放 html 文件
    'DIRS': [
        os.path.join(BASE_DIR, 'templates')
    ],
    
    'APP_DIRS': True,
    'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

css,js ,image 文件配置: 在 settings.py 文件末尾

STATIC_URL = '/static/'  # 在 項目根目錄 helloworld 下面

# 固然還有別名的用法,剛開始學,多說無益

如何在 html 中引用 css,js

<!DOCTYPE html>
<html lang="en">
<head>
    <script src='/static/test.js'></script>
    <title>Document</title>
</head>
<body>

</body>
</html>

規範項目

上面有些寫法多爲練習使用,所以不太規範。好比咱們在 helloword/helloword/urls.py 寫了一大堆函數,很是不雅觀。因此如今引入一個新的東西。

  1. 在項目根目錄下,執行

    python3 manage.py startapp app(模塊名)
    
     # 這是咱們第二次使用  manage.py 這個文件,
     # 第一次是啓動項目,如今應該能夠理解 這個文件是幹嗎用的
     # 執行結束,咱們會發現項目根目錄下多了一個 app 目錄

  1. 讓 django 知道你新增的 app 模塊

    INSTALLED_APPS = [
             'django.contrib.admin',
             'django.contrib.auth',
             'django.contrib.contenttypes',
             'django.contrib.sessions',
             'django.contrib.messages',
             'django.contrib.staticfiles',
     		# 新增 
             'app.apps.AppConfig'  # 也能夠直接寫 'app'
     		# app 就是新增的目錄名 後面的 固定,
     		# 你也能夠打開  app/apps.py 文件,看看
         ]
  2. app 目錄下 有個 views.py 文件,咱們能夠把函數定義在這裏。

    from django.shortcuts import HttpResponse, render, redirect
    
     def index(request):
    
         return render(request, 'index.html')
  3. 而後回到 helloword/helloword/urls.py 文件中,修改後以下:

    # 1. 導入函數
     from app.views import index
    
     # 2. 配置
     urlpatterns = [
         url(r'^admin/', admin.site.urls),
         url(r'^index/', index),
     ]

附加

如何配置 mysql 數據庫

一樣找到 helloworld/helloworld/ 下面有個 settings.py 文件,大概 70-80行左右

修改後以下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'student_sys', # 庫
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': 3306
    }
}

而後找到 helloworld/app/init.py 文件

文件默認是空的, 添加以下配置

import pymysql

# 告訴 django 用 pymysql 代替 mysqldb
pymysql.install_as_MySQLdb()

引入 orm

進入 helloworld/app/ 目錄找到 models.py 文件,修改以下:

from django.db import models

# 定義一個 Student 類
class Student(models.Model):
    id = models.AutoField(primary_key=True) # 主鍵
    name = models.CharField(max_length=20) # 字符類型
    sex = models.CharField(max_length=2)
    birthday = models.CharField(max_length=10)

    
    def __str__(self):
        return self.name + "\t" + self.sex + "\t" + self.birthday

在項目根目錄 helloworld 下依次執行

python3 manage.py makemigrations

python3 manage.py migrate

會自動幫咱們生成表

也許你還會困惑:

  1. 爲何就定義了一個 model,生成了那麼多表
  2. 修改 model 後,怎麼自動更新表結構
  3. 如何 crud 等等

~~~~~ 請自行探索

總結

自我吐槽: 其實這樣的教程很雞肋,擔憂篇幅過長看的人眼花繚亂。

  • 不少地方沒有給出解釋,好比 settings.py 的一些配置,自動生成表等
  • 遺留了不少問題沒有給出答案,甚至有些問題都沒在文中提到,好比,訪問頁面會出現 403,該如何解決
  • 之因此沒講那麼多,是以爲那些問題很容解決

寫完以後,感受本文的定位更多的是自我總結,可能大家看到這文章會吐槽,噴我~~~

相關文章
相關標籤/搜索