Django學(xué)習(xí)筆記

django遷移無(wú)效問(wèn)題解決

背景

  • Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架
  • Django遵守BSD版權(quán),初次發(fā)布于2005年7月, 并于2008年9月發(fā)布了第一個(gè)正式版本1.0 。
  • MVC模式,即模型M(module),視圖V(view)和控制器C(controller)。
    M:主要對(duì)數(shù)據(jù)庫(kù)層的封裝
    V:向用戶顯示數(shù)據(jù)
    C:核心,處理請(qǐng)求,獲取數(shù)據(jù),返回結(jié)果
    • 高可擴(kuò)展性
    • 向后兼容
    • 低耦合,高內(nèi)聚
      Django采用了MVT設(shè)計(jì)模式
      m表示model,負(fù)責(zé)與數(shù)據(jù)庫(kù)交互
      v表示view,是核心,負(fù)責(zé)接收請(qǐng)求、獲取數(shù)據(jù)、返回結(jié)果
      t表示template,負(fù)責(zé)呈現(xiàn)內(nèi)容到瀏覽器
mvt

shell 快捷鍵

安裝

pip install Django==1.11.6

如需獲取最新版,見(jiàn)Django安裝

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

  • 創(chuàng)建HelloWorld項(xiàng)目
django-admin.py startproject HelloWorld
  • 目錄說(shuō)明

    • HelloWorld: 項(xiàng)目的容器。
    • manage.py: 一個(gè)實(shí)用的命令行工具,可讓你以各種方式與該 Django 項(xiàng)目進(jìn)行交互。
    • HelloWorld/init.py: 一個(gè)空文件,告訴 Python 該目錄是一個(gè) Python 包。
    • HelloWorld/settings.py: 該 Django 項(xiàng)目的設(shè)置/配置。
    • HelloWorld/urls.py: 該 Django 項(xiàng)目的 URL 聲明; 一份由 Django 驅(qū)動(dòng)的網(wǎng)站"目錄"。
    • HelloWorld/wsgi.py: 一個(gè) WSGI 兼容的 Web 服務(wù)器的入口,以便運(yùn)行你的項(xiàng)目。
  • 運(yùn)行第一個(gè)server
    輸入命令:

python manage.py runserver 0.0.0.0:8000

瀏覽器打開(kāi)網(wǎng)址:127.0.0.1:8000,如果正常打開(kāi)網(wǎng)頁(yè),則運(yùn)行正常。

  • url() 函數(shù)
    Django url() 可以接收四個(gè)參數(shù),分別是兩個(gè)必選參數(shù):regex、view 和兩個(gè)可選參數(shù):kwargs、name,接下來(lái)詳細(xì)介紹這四個(gè)參數(shù)。
    • regex: 正則表達(dá)式,與之匹配的 URL 會(huì)執(zhí)行對(duì)應(yīng)的第二個(gè)參數(shù) view。
    • view: 用于執(zhí)行與正則表達(dá)式匹配的 URL 請(qǐng)求。
    • kwargs: 視圖使用的字典類型的參數(shù)。
    • name: 用來(lái)反向獲取 URL。

使用Templates

  • 在項(xiàng)目目錄下新建templates文件夾
    新建html文件,如hello.html
<h1>hello world</h1>
  • 添加模板路徑
    在settings.py文件中添加:
    修改 TEMPLATES 中的 DIRS 為 [BASE_DIR+"/templates",]
  • 使用
    view.py文件中使用:
from django.http import

模板標(biāo)簽

  • if/else
{% if condition %}
     ... display
{% endif %}
  • for
<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>
  • ifequal/ifnotequal
{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}
  • 注釋標(biāo)簽
{# 這是一個(gè)注釋 #}
  • 過(guò)濾器
{{ name|lower }}
{{ my_list|first|upper }}
{{ bio|truncatewords:"30" }}

其他過(guò)濾器
addslashes : 添加反斜杠到任何反斜杠、單引號(hào)或者雙引號(hào)前面。
date : 按指定的格式字符串參數(shù)格式化 date 或者 datetime 對(duì)象,實(shí)例:
{{ pub_date|date:"F j, Y" }}
length : 返回變量的長(zhǎng)度。

  • include
{% include "nav.html" %}

模板繼承

其中hello.html繼承了base.html。

  • base.html

<!DOCTYPE html>
<html>
<head>

<meta charset="utf-8">
<title>菜鳥(niǎo)教程(runoob.com)</title>
</head>
<body>
    <h1>Hello World!</h1>
    <p>菜鳥(niǎo)教程 Django 測(cè)試。</p>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
</body>
</html>
  • hello.html

{% extends "base.html" %}
 
{% block mainbody %}<p>繼承了 base.html 文件</p>
{% endblock %}

使用數(shù)據(jù)庫(kù)MySQL

  • 數(shù)據(jù)庫(kù)安裝
    安裝MySQL可參考:MySQL安裝
  • 數(shù)據(jù)庫(kù)配置
    在項(xiàng)目的 settings.py 文件中找到 DATABASES 配置項(xiàng)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
        'NAME': 'test', #數(shù)據(jù)庫(kù)名
        'USER': 'test',  # 數(shù)據(jù)庫(kù)用戶名
        'PASSWORD': 'test123', #數(shù)據(jù)庫(kù)密碼
        'HOST':'localhost',
        'PORT':'3306',
    }
}
  • 定義模型
    要使用模型,需要?jiǎng)?chuàng)建一個(gè)app,在項(xiàng)目目錄下使用以下命令:
django-admin.py startapp TestModel

修改 TestModel/models.py 文件,代碼如下:

# models.py
from django.db import models
 
class Test(models.Model):
    name = models.CharField(max_length=20)

定義name字段,數(shù)據(jù)類型則由CharField(相當(dāng)于varchar)、DateField(相當(dāng)于datetime), max_length 參數(shù)限定長(zhǎng)度。

  • 添加模型
    在settings.py中找到INSTALLED_APPS這一項(xiàng),如下:
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TestModel',               # 添加此項(xiàng)
)
  • 運(yùn)行遷移
$ python manage.py makemigrations TestModel  # 讓 Django 知道我們?cè)谖覀兊哪P陀幸恍┳兏?$ python manage.py migrate TestModel   # 創(chuàng)建表結(jié)構(gòu)
  • 測(cè)試
    進(jìn)入shell命令
python manage.py shell

查找信息:

Test.objects.all()
  • 添加數(shù)據(jù)
    添加test.db文件:

# -*- coding: utf-8 -*-
 
from django.http import HttpResponse
 
from TestModel.models import Test
 
# 數(shù)據(jù)庫(kù)操作
def testdb(request):
    test1 = Test(name='runoob')
    test1.save()
    return HttpResponse("<p>數(shù)據(jù)添加成功!</p>")
  • 修改urls.py文件:
from django.conf.urls import *
from . import view,testdb
 
urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
]
# -*- coding: utf-8 -*-
 
from django.http import HttpResponse
 
from TestModel.models import Test
 
# 數(shù)據(jù)庫(kù)操作
def testdb(request):
    test1 = Test(name='runoob')
    test1.save()
    return HttpResponse("<p>數(shù)據(jù)添加成功!</p>")

  • 運(yùn)行
    運(yùn)行命令:
python manage.py runserver 0.0.0.0:8000

打開(kāi)瀏覽器訪問(wèn):127.0.0.1:8000

創(chuàng)建用戶組

python manage.py createsuperuser

在admin.py中注冊(cè)u(píng)ser

admin.site.register('TestModel')

開(kāi)啟服務(wù)后地址后面加上/user即可進(jìn)入后臺(tái)管理頁(yè)面,在管理頁(yè)面可以可視化管理,十分方便。

部署

  • 安裝:
    先安裝uwsgi:
    pip install uwsgi
  • 測(cè)試
    新建文件test.py
# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2
  • 運(yùn)行uwsgi:
uwsgi --http :8000 --wsgi-file test.py
  • uwsgi運(yùn)行django
    uwsgi --http :8000 --module mysite.wsgi
  • 安裝nginx
    sudo apt-get install nginx
  • 部署靜態(tài)文件
    django settings中添加:
    STATIC_ROOT = 'home/renyangfar/project/static' 運(yùn)行命令收集靜態(tài)文件到配置的STATIC_ROOT文件中:python manage.py collectstatic`
  • 編輯配置文件/etc/nginx/sites-enabled/default
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 本文是在學(xué)習(xí)https://www.gitbook.com/book/djangogirlstaipei/d...
    LLLeon閱讀 2,119評(píng)論 0 16
  • 建立第一個(gè)項(xiàng)目 新建工程 進(jìn)入你要建立工程的目錄,鍵入如下命令(其中mysite是你的項(xiàng)目名稱): django-...
    小小白老鼠閱讀 804評(píng)論 0 1
  • 筆記來(lái)源:自強(qiáng)學(xué)堂-Django教程這個(gè)教程真的非常好用!強(qiáng)烈推薦 Django簡(jiǎn)介-組成部分 urls.py:網(wǎng)...
    LeeLom閱讀 1,789評(píng)論 0 2
  • (一)、啟動(dòng)服務(wù)器 (二)、創(chuàng)建數(shù)據(jù)庫(kù)表 或 更改數(shù)據(jù)庫(kù)表或字段 Django 1.7.1及以上 用以下命令 1....
    夏天夏星閱讀 5,939評(píng)論 0 17
  • 去年的事情特別多,也沒(méi)有什么時(shí)間充電學(xué)習(xí)。今年目測(cè)輕松一點(diǎn),年初本來(lái)計(jì)劃就好好休息一下,結(jié)果一晃2017就度過(guò)了一...
    灰豹兒閱讀 681評(píng)論 0 2

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