前戲部分
Django是什么?
Django 是一個高級的 Python Web框架,可以快速開發安全和可維護的網站。由經驗豐富的開發者構建,Django負責處理網站開發中麻煩的部分,因此你可以專注於編寫應用程序,而無需重新開發。
它是免費和開源的,有活躍繁榮的社區,豐富的文檔,以及很多免費和付費的解決方案。
Django 可以使你的應用具有以下優點:
完備性 包含了基礎的權限驗證,有豐富的第三方組件(輪子)供使用
通用性 適用余各種BS架構的網站
安全性 (注 框架是安全的的,主要是自己寫的代碼有毒)
- 默認情況下,Django 可以防范許多漏洞,包括SQL注入,跨站點腳本,跨站點請求偽造和點擊劫持 (請參閱 網站安全 相關信息,如有興趣).
可擴展 因為是開源的 熟悉框架后怎么開心怎么改
可維護性 只要你不亂來,維護性決定沒有問題
靈活性 跨平台
- 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