Python Django 零基礎破門而入篇(一)


前戲部分

Django是什么?

Django 是一個高級的 Python Web框架,可以快速開發安全和可維護的網站。由經驗豐富的開發者構建,Django負責處理網站開發中麻煩的部分,因此你可以專注於編寫應用程序,而無需重新開發。
它是免費和開源的,有活躍繁榮的社區,豐富的文檔,以及很多免費和付費的解決方案。

Django 可以使你的應用具有以下優點:

完備性 包含了基礎的權限驗證,有豐富的第三方組件(輪子)供使用

通用性  適用余各種BS架構的網站

安全性  (注  框架是安全的的,主要是自己寫的代碼有毒)

默認情況下,Django 可以防范許多漏洞,包括SQL注入,跨站點腳本,跨站點請求偽造和點擊劫持 (請參閱  網站安全 相關信息,如有興趣).

可擴展   因為是開源的 熟悉框架后怎么開心怎么改

可維護性  只要你不亂來,維護性決定沒有問題

  模型視圖控制器 (MVC) 模式

靈活性  跨平台

Linux,Windows和Mac OsX 上運行應用程序

更多詳細信息請見: https://developer.mozilla.org/zh-CN/docs/learn/Server-side/Django/Introduction

1.打開pycharm 這句是廢話,厲害的同學可以用  cmd 命令手動模式

2.新建django 項目  OpenTheDoor

 

3.項目結構說明

 

4.修改項目 settings.py  配置項目語言為中文、修改時區   

LANGUAGE_CODE = 'zh-hans'  # 設置為中文
TIME_ZONE = 'Asia/Shanghai'  # 設置時區
USE_I18N = True  # 默認為True,是否啟用自動翻譯系統
USE_L10N = True  # 默認False,以本地化格式顯示數字和時間
USE_TZ = False  # 默認值True。若使用了本地時間,必須設為False

5.設置靜態資源目錄

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

6.寫第一個 models.py (數據庫表,實體類)

  安裝   django-multiselectfield   用於實現 喜歡吃水果 多選

pip install django-multiselectfield

       安裝  Pillow  實現imageFile字段

pip install Pillow
from django.db import models
import datetime
import uuid

from django.contrib.auth.models import User
# Create your models here.
from django.utils.html import format_html
from django.db.models import IntegerField, Model
from django.core.validators import MaxValueValidator, MinValueValidator
import random, os
from django.contrib.auth.models import AbstractUser
from django.db import models
# 安裝 pip install django-multiselectfield
from multiselectfield import MultiSelectField

STATE_GENDER = ((0, ""), (1, ""), (2, "保密"))
ROLS_FRUIT = ((0, '西瓜'), (1, '草莓'), (2, '菠蘿'))



# 大佬信息
class bossInfo(models.Model):
    name = models.CharField(verbose_name="姓名(文本類型)", max_length=225, null=False, blank=False, default="")
    # 課后練習 如何控制輸入的 age 大於20 小於100
    age = models.IntegerField(verbose_name="年齡(數字類型)", null=False, blank=False, default=1)
    gender = models.CharField(verbose_name="性別(單選)", max_length=225, null=False, blank=False, default=1,
                              choices=STATE_GENDER)
    likeFruit = MultiSelectField(verbose_name="喜歡的水果(多選)", choices=ROLS_FRUIT)
    #headImage = models.ImageField(verbose_name="個人寫真(圖片文件)", null=False, blank=False, default=None)
    userUrl = models.URLField(verbose_name="個人主頁(URL地址)", null=False, blank=False, default=None)
    desc = models.TextField(verbose_name="描述(多行文本)", max_length=1000, null=False, blank=False, default=None)
    # 通過model.  的提示在擴展8個字段  自由發揮
    createTime = models.DateTimeField(auto_now_add=True, verbose_name="創建時間")
    lastTime = models.DateTimeField(auto_now=True, verbose_name="修改時間")
    creator = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name="創建者",
                                related_name="bossinfo_creator")
    editor = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name="修改者",
                               related_name="bossinfo_editor")

    class Meta:
        verbose_name = "大佬信息管理"
        verbose_name_plural = "大佬信息管理"

    def __str__(self):
        return self.name

 

7.配置 admin.py

from django.contrib import admin
from app import models

# Register your models here.
admin.site.site_header = "大佬管理"
admin.site.site_title = "大佬管理后台管理"


@admin.register(models.bossInfo)
class appManagerAdmin(admin.ModelAdmin):
    fields = (
        "name", "age", "gender",
        "likeFruit", "userUrl", "desc")
    list_display = (
        "name", "age", "gender",
        "likeFruit", "userUrl",
        "createTime",
        "lastTime",
        "creator", "editor")
    list_display_links = ("name",)
    exclude = ("createTime", "creator", "editor")
    search_fields = ("name",)
    list_filter = ("gender", "likeFruit")
    model_icon = "fa fa-tag"
    list_per_page = 20
    ordering = ["-id"]

    def save_model(self, request, obj, form, change):
        if form.is_valid():
            if change:
                obj.editor = request.user
            else:
                obj.creator = request.user
                obj.editor = request.user
                obj.save()
        super().save_model(request, obj, form, change)

8.運行效果

 

9.安裝django-simpleui包

pip install django-simpleui

  django-simpleui 詳細文檔以及配置說明

  https://github.com/newpanjing/simpleui/blob/master/QUICK.md

10.項目目錄下 settings.py 配置

11.再次運行項目查看效果

 

 

12.寫第一個HTTP 請求 views.py

       app-->views.py  (有CBV 和 FBV) 目前我們先學習FBV

  FBV(function base views) 就是在視圖里使用函數處理請求。

  CBV(class base views) 就是在視圖里使用類處理請求。

from django.shortcuts import render
from django.http import HttpResponse


# Create your views here.

# 第一個請求
def helloWorld(request):
    return HttpResponse("very nice")

 

13.項目文件夾OpenTheDoor-- urls.py

from django.contrib import admin
from django.urls import path
from app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('helloWorld/', views.helloWorld),
]

14. 運行效果

 再次修改views.py  讓請求返回html頁面

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
# 第一個請求
# 直接返回響應體
def helloWorld(request):
    return HttpResponse("very nice")

# 返回html頁面
def helloH5(request):
    return render(request, "helloH5.html")

 

 urls.py 配置如下

from django.contrib import admin
from django.urls import path
from app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('helloWorld/', views.helloWorld),
    path('helloH5/', views.helloH5),
]

運行效果

15.最終項目結構如下

16.常用命令

數據庫遷移
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

測試環境
PUBTYPE=app ENV=test python3 manage.py makemigrations --settings=項目名稱.test_settings
PUBTYPE=app ENV=test python3 manage.py migrate --settings=項目名稱.test_settings

PUBTYPE=app ENV=test python3 manage.py runserver 0.0.0.0:80 --settings=項目名稱.test_settings

PUBTYPE=app ENV=test python3 manage.py createsuperuser --settings=項目名稱.test_settings


生產環境
PUBTYPE=app ENV=production python3 manage.py makemigrations --settings=項目名稱.prd_settings
PUBTYPE=app ENV=production python3 manage.py migrate --settings=項目名稱.prd_settings

PUBTYPE=app ENV=production python3 manage.py runserver 0.0.0.0:8000 --settings=項目名稱.prd_settings


PUBTYPE=app ENV=production python3 manage.py createsuperuser --settings=landlorde.prd_settings


新建app
python manage.py startapp xxx

安裝requirement.txt
pip install -r requirements.txt

生成requirement.txt
pip freeze > requirements.txt

17. 知識點

settings.py 配置說明

DEBUG

          默認值是True。在本地開發測試環境下設置DEBUG=True可以顯示bug信息,便於開發者找出代碼錯誤所在。當你在部署項目在生產環境時,請切記設置DEBUG=False。因為生成環境下打開Debug會暴露很多敏感設置信息(比如數據庫密碼)。注意: 當你設置                      DEBUG=False, 你一定要設置ALLOWED_HOSTS選項, 否則會拋出異常。

ALLOWED_HOSTS

          默認值為空[]。設置ALLOWED_HOSTS是為了限定用戶請求中的host值,以防止黑客構造包來進行頭部攻擊。該選項正確設置方式如下:

    • DEBUG=True: ALLOWED_HOSTS可以為空,也可設置為['127.0.0.01', 'localhost']
    • DEBUG=False: ALLOWED_HOSTS=['46.124.78.xx', 'www.baidu.com','127.0.0.1']

INSTALLED_APPS

          用於增刪一個項目(Project)所包含的應用(APP)。只有對列入此項的APP, Django才會生成相應的數據表。

 

國際化(語言與時間)

LANGUAGE_CODE = 'zh-hans' #設置為中文
TIME_ZONE = 'Asia/Shanghai' # 設置時區
USE_I18N = True # 默認為True,是否啟用自動翻譯系統
USE_L10N = True # 默認False,以本地化格式顯示數字和時間
USE_TZ = False # 默認值True。若使用了本地時間,必須設為False

 

18.學習練手項目 騷操作這里面都有

  https://www.django.cn/course/course-2.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM