Django - 01-django基本流程

[toc]

1 安裝Django

1.1 Django版本與Python版本對應(yīng)關(guān)系

Django      | Python
------      | ------
1.8         | 2.7, 3.2 (until the end of 2016), 3.3, 3.4, 3.5
1.9, 1.10   | 2.7, 3.4, 3.5
1.11        | 2.7, 3.4, 3.5, 3.6
2.0         | 3.4, 3.5, 3.6
2.1         | 3.5, 3.6, 3.7

1.2 安裝Django

安裝

pip install django==1.11.4



卸載

pip uninstall django

1.3 安裝驗(yàn)證

python
>>> import django
>>> django.get_version()

2 創(chuàng)建項(xiàng)目

在一個合適的位置創(chuàng)建目錄

使用終端進(jìn)入上一步創(chuàng)建的目錄下

執(zhí)行: django-admin startproject [project_name]

目錄層級說明:
    project
        manage.py           一個命令行工具,可以讓我我們使用多種方式對Django項(xiàng)目進(jìn)行操作
        
        project目錄
            __init__.py     一個空文件,告訴Python這個目錄應(yīng)該被看做一個Python包
            settings.py     項(xiàng)目的配置文件
            urls.py         項(xiàng)目的URL聲明,匹配view
            wsgi.py         項(xiàng)目與WSGI兼容的Web服務(wù)器入口

3 基本操作

3.1 設(shè)計(jì)表結(jié)構(gòu)

學(xué)生庫
        班級表結(jié)構(gòu)
                表名    grade
                字段
                        班級名稱    gname
                        成立時間    gdate
                        女生總數(shù)    ggirlnum
                        男生總數(shù)    gboynum
                        是否刪除    isDelete
        學(xué)生表結(jié)構(gòu)
                表名    students
                字段
                        學(xué)生姓名    sname
                        學(xué)生性別    sgender
                        學(xué)生年齡    sage
                        學(xué)生簡介    scontend
                        所屬班級    sgrade
                        是否刪除    isDelete

3.2 配置數(shù)據(jù)庫

注意:Django 默認(rèn)使用sqlite3

在settings.py文件中,通過DATABASES進(jìn)行數(shù)據(jù)庫配置

配置MySQL
        python3.x 安裝的是PyMySQL; python2.x 安裝的是mysql-python
        
        在__init__.py寫入兩行代碼
            import pymysql
            pymysql.install_as_MySQLdb()
        
        配置 settings.py
            DATABASES = {
                'default': {
                    'ENGINE': 'django.db.backends.mysql',
                    'NAME': 'class',
                    'USER': 'root',
                    'PASSWORD': 'admin',
                    'HOST': '192.168.23.128',
                    'PORT': '3306',
                }
            }

3.3 創(chuàng)建應(yīng)用

在每個項(xiàng)目中可以創(chuàng)建多個應(yīng)用,每個應(yīng)用進(jìn)行一種業(yè)務(wù)處理;

打開終端,進(jìn)入項(xiàng)目目錄下;

執(zhí)行: python manage.py startapp myapp

myapp 目錄說明:
        admin.py        站點(diǎn)配置
        models.py       模型
        views.py        視圖

3.4 激活應(yīng)用

在 settings.py 文件中,將myapp應(yīng)用加入到 INSTALLED_APPS 中;

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp'
]

3.5 定義模型

概述: 有一個數(shù)據(jù)表,就對應(yīng)一個模型;

在 models.py 文件中定義模型:
        引入 from django.db import models
        
        模型要繼承 models.Model 類
        
                class Grades(models.Model):
                    gname = models.CharField(max_length=20)
                    gdate = models.DateTimeField()
                    ggirlnum = models.IntegerField()
                    gboynum = models.IntegerField()
                    isDelete = models.BooleanField(default=False)
                    
                class Students(models.Model):
                    sname = models.CharField(max_length=20)
                    sgender = models.BooleanField(default=True)
                    sage = models.IntegerField()
                    scontend = models.TextField()
                    isDelete = models.BooleanField(default=False)
                    # 關(guān)聯(lián)外鍵
                    sgrade = models.ForeignKey('Crades')

說明:
        不需要定義主鍵,在生成表時自動添加,并且值為自動增加;
        一個表對應(yīng)一個模型類
        一個類屬性對應(yīng)標(biāo)的一個字段

3.6 在數(shù)據(jù)庫中生成數(shù)據(jù)表

生成遷移文件
        執(zhí)行: python manage.py makemigrations <appname>
        遷移文件在:myapp/migrations/0001_inital.py
        此時數(shù)據(jù)庫中還沒有生成數(shù)據(jù)表

執(zhí)行遷移:
        執(zhí)行: python manage.py  migrate <appname>
        相當(dāng)于執(zhí)行 sql 語句創(chuàng)建數(shù)據(jù)表

備注:
        帶上appname只會生成對應(yīng)app的數(shù)據(jù)表;
        不帶,則會生成全部的數(shù)據(jù)表,包括一些系統(tǒng)的默認(rèn)表;

3.7 測試數(shù)據(jù)操作

進(jìn)入python shell,執(zhí)行: python manage.py shell

引入一些包
        from myapp.models import Grands, Students
        from django.utils import timezone
        from datatime import *
        
查詢所有數(shù)據(jù)
        類名.objects.all()
        Grades.objects.all()
        
        重寫 __str__方法,可以看到對象的值:
            def __str__(self):
                return '%s | %s | %s' % (self.gname, self.gdate, self.gnum)
        
添加數(shù)據(jù)
        本質(zhì): 創(chuàng)建一個模型類的對象實(shí)例;
            grade1 = Grades()
            grade1.gname = 'python'
            grade1.gdate = datetime(year=2018, month=2, day=14)
            grade1.ggirlnum=3
            grade1.gboynum=2
            grade1.save()
            
查看某個對象
        類名.objects.get(pk=2)      pk == primary_key
        
修改數(shù)據(jù)
        grade2 = Grades.objects.get(pk=2)
        grade2.ggirlnum = 20
        grade2.save()
        
刪除數(shù)據(jù)
        grade2.delete()
        注意:是物理刪除,數(shù)據(jù)庫中的表里的數(shù)據(jù)被刪除了;

關(guān)聯(lián)對象
            grade1 = Grades.objects.get(pk=1)
            stu = Students()
            stu.sname = 'jane'
            stu.sgender=False
            stu.sage=18
            stu.scontend= "i am jane."
            stu.sgrade = grade1
            stu.save()
        
        獲取關(guān)聯(lián)對象的集合
                需求:獲取 python 班所有學(xué)生
                        對象名.關(guān)聯(lián)的類名小寫_set.all()
                            grade1.students_set.all()
        
            
                需求:給 python 班創(chuàng)建allen
                            stu3 = grade1.students_set.create(sname=u'allen', sgender=True, sage=30, scontend='i am allen.')
                        注意:不用調(diào)用save方法

3.8 啟動服務(wù)器

格式:
        執(zhí)行:python manage.py runserver ip:port
        ip 可以不寫,不寫代表localhost
        port默認(rèn)8000
        執(zhí)行:python manage.py runserver

說明:
        這是純python寫的輕量級web服務(wù)器,只在測試開發(fā)時使用;

3.9 admin站點(diǎn)管理

概述:
        內(nèi)容發(fā)布:
                負(fù)責(zé)添加、修改、刪除內(nèi)容
                公告訪問

配置admin應(yīng)用:
        在 setting.py 文件的 INSTALLED_APPS 中添加 django.contrib.admin


創(chuàng)建管理員用戶:
        執(zhí)行:python manage.py createsuperuser
        一次輸入 用戶名、郵箱、密碼(8位,非字典密碼)
        訪問:127.0.0.1:8000/admin


漢化:
        修改 settings.py
                LANGUAGE_CODE = 'zh-Hans'
                TIME_ZONE = 'Asia/Shanghai'


管理數(shù)據(jù)表:
        修改 admin.py:
                from .models import Grades, Students
                # 注冊
                admin.site.register(Grades)
                admin.site.register(Students)
            
            
        自定義管理頁面:(上面的注冊拋掉)
                class GradesAdmin(admin.ModelAdmin):
                
                # 列表頁屬性
                    list_display = ['pk', 'gname', 'gdate', 'gbnum', 'ggnum']       # 顯示表的字段(pk 是主鍵,也可以用字段名id)
                    list_filter = ['gname']             # 右側(cè)添加過濾字段欄,使用字段以及字段值來過濾數(shù)據(jù)
                    search_fields = ['gdate']           # 增加搜索框,定義哪些字段的值能夠搜索
                    list_per_page = 5                   # 分頁,每頁顯示的數(shù)據(jù)數(shù)量
            
                # 添加、修改頁的屬性 (注意 fields 和 fieldsets 不能同時使用)
                    fields = ['gname', 'gbnum', 'ggnum', 'gdate', 'isDelete']         # 屬性的先后順序:修改表單的顯示順序
                    
                    fieldsets = [                                           # 給屬性分組
                        ('Base', {"fields": ['sname', 'sgender', 'sage']}),
                        ('Other', {"fields": ['sgrade', 'scontend', 'isDelete']})
                    ]
                    
                admin.site.register(Grades, GradesAdmin)
            
        
        關(guān)聯(lián)對象:
                需求:在創(chuàng)建一個班級時,可以直接添加幾個學(xué)生;
                        class StudentsInfo(admin.TabularInline):
                            model = Students        # 和 Students 模型關(guān)聯(lián)
                            extra = 2               # 創(chuàng)建班級時,添加兩個學(xué)生
                        # 注冊
                        class GradesAdmin(admin.ModelAdmin):
                            inlines = [StudentsInfo]
                備注:
                        admin.TabularInline     把需要填寫的表單,放在一行顯示
                        admin.StackedInline     把需要填寫的表單,逐行顯示
                    
                    
        boole值顯示問題:
                class StudentsAdmin(admin.ModelAdmin):
                    def gender(self):
                        if self.sgender:
                            return '男'
                        else:
                            return '女'
                # 設(shè)置頁面列的名稱
                    gender.short_description = '性別'
                    list_display = ['id', 'sname', 'sage', gender, 'scontend', 'sgrade']
                
        
        列表標(biāo)題顯示問題:
                age = lambda self: self.sage
                age.short_description = '年齡'
                list_display = ['id', 'sname', age, gender, 'scontend', 'sgrade']
        
            
        執(zhí)行動作操作框位置:
            actions_on_bottom = True
            actions_on_top = False      # 默認(rèn)是 True
        
        
        使用裝飾器完成注冊
            @ admin.register(Students)
            class StudentsAdmin(admin.ModelAdmin):
            ...
            ...
            # admin.site.register(Students, StudentsAdmin)

4 視圖的基本使用

4.1 概述

在 Django 中,視圖對web請求進(jìn)行回應(yīng);

視圖就是一個 python 函數(shù),在 views.py 中定義;

4.2 定義視圖

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
def index(request):
    return HttpResponse('Python is Best!')

4.3 配置url

修改 class(工程) 目錄下的 urls.py 文件
    from django.conf.urls import url,include
    from django.contrib import admin
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^', include('myapp.urls'))
    ]


在myapp應(yīng)用目錄下創(chuàng)建一個 urls.py
    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^$', views.index)
    ]

5 模板的基本使用

5.1 概述

模板是HTML頁面,可以根據(jù)視圖傳遞過來的數(shù)據(jù)進(jìn)行填充;

5.2 創(chuàng)建模板

創(chuàng)建 templates 目錄,在目錄下創(chuàng)建對應(yīng)模板目錄 class/templates/myapp

5.3 配置模板路徑

修改 settings.py 文件下 TEMPLATES, 把templates添加到DIRS中:
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')],
            'APP_DIRS': True,

5.4 定義模板

在 class/templates/myapp 下創(chuàng)建 grades.py 和 students.py
        模板語法:
                {{輸出值,可以是變量,也可以是對象.屬性}}
                {%執(zhí)行代碼段%}
        
        
        需求:http://127.0.0.1:8000/grades
        
                編輯 grades.html 模板:
                        <h1>班級信息列表</h1>
                        <ul>
                            {% for grade in grages %}
                            <li>
                                <a href="#">{{ grade.gname }}</a>
                            </li>
                            {% endfor %}
                        </ul>
                    
                    
                定義視圖:
                        from .models import Grades
                        def grades(requests):
                            # 去模板取數(shù)據(jù)
                            gradesList= Grades.objects.all()
                            # 將數(shù)據(jù)傳遞給模板,再渲染頁面,將渲染好的頁面返回給瀏覽器
                            return render(requests, 'myapp/grades.html', {'grades': gradesList})
                            #            request參數(shù)     模板路徑      模板中接收的參數(shù)名: 傳遞的數(shù)據(jù)
                        
                配置url:
                        url(r'^grades/$', views.grades),
                    
                    
        需求:http://127.0.0.1:8000/students
                編輯 students.html 模板:
                        <h1>學(xué)生信息表</h1>
                        <ul>
                            {% for studentInfo in student %}
                            <li>
                                <a href="#">{{ studentInfo.id }}-{{ studentInfo.sname }}-{{ studentInfo.sage }}-{{ studentInfo.scontend }}</a>
                            </li>
                            {% endfor %}
                        </ul>
                    
                定義視圖:
                        def student(request):
                            studentList = Student.objects.all()
                            return render(request, 'myapp/student.html', {'student': studentList})
                    
                配置url:
                        url(r'^student/$', views.student),
        
        
        需求:點(diǎn)擊班級顯示對應(yīng)學(xué)生信息
                復(fù)用 students.html 模板
                
                修改 grades.html 讓UAL傳參:
                        <a href="{{ gradeInfo.id }}">{{ gradeInfo.gname }}</a>
                    
                定義視圖:
                        def gradeStudent(request, num):
                            grade = Grade.objects.get(pk=num)
                            studentList = grade.student_set.all()
                            return render(request, 'myapp/student.html', {'student': studentList})
                            
                配置url:
                        url(r'^grade/(\d)$', views.gradeStudent),
                        
        
        需求:通過主頁分別訪問 grades students admin
                編輯 index.html 模板:
                        <h2><a href="{{ 'admin' }}">admin</a></h2>
                        <h2><a href="{{ 'grade' }}">Grade</a></h2>
                        <h2><a href="{{ 'student' }}">Student</a></h2>
                        
                修改視圖:
                        def index(request):
                            return render(request, 'myapp/index.html')
                            
                配置url:
                        url(r'^$', views.index),
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Django介紹 1.簡介 Django,發(fā)音為[`d???ɡ??],是用python語言寫的開源web開發(fā)框...
    阿孝不會飛閱讀 917評論 0 2
  • Django 準(zhǔn)備 “虛擬環(huán)境為什么需要虛擬環(huán)境:到目前位置,我們所有的第三方包安裝都是直接通過 pip inst...
    33jubi閱讀 1,394評論 0 5
  • 點(diǎn)我查看本文集的說明及目錄。 本項(xiàng)目相關(guān)內(nèi)容( github傳送 )包括: 實(shí)現(xiàn)過程: CH1 創(chuàng)建一個博客應(yīng)用 ...
    學(xué)以致用123閱讀 1,613評論 1 3
  • 一、Django簡介 Django是用Python開發(fā)的一個免費(fèi)開源的Web框架,可以用于快速搭建高性能,優(yōu)雅的網(wǎng)...
    仙靈兒閱讀 3,508評論 0 5
  • PythonWeb框架要點(diǎn)、Django介紹、工程搭建、配置、靜態(tài)文件與路由 1.Python Web 框架要點(diǎn) ...
    Cestine閱讀 1,945評論 0 6

友情鏈接更多精彩內(nèi)容