1法精、安裝撑柔,指定安裝2.2版本
pip install django==2.2 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
2获询、創(chuàng)建測試項(xiàng)目
django-admin.py startproject testDjango
cd testDjango
python manage.py runserver
生成目錄結(jié)構(gòu)如下
目錄結(jié)構(gòu)說明:
testDjango: 項(xiàng)目的容器掖棉。
manage.py: 一個(gè)實(shí)用的命令行工具聂抢,可讓你以各種方式與該 Django 項(xiàng)目進(jìn)行交互拯钻。
testDjango/init.py: 一個(gè)空文件帖努,告訴 Python 該目錄是一個(gè) Python 包。
testDjango/settings.py: 該 Django 項(xiàng)目的設(shè)置/配置粪般。
testDjango/urls.py: 該 Django 項(xiàng)目的 URL 聲明; 一份由 Django 驅(qū)動的網(wǎng)站"目錄"拼余。
testDjango/wsgi.py: 一個(gè) WSGI 兼容的 Web 服務(wù)器的入口,以便運(yùn)行你的項(xiàng)目亩歹。
訪問地址為http://127.0.0.1:8000
修改默認(rèn)視圖匙监,在testDjango項(xiàng)目下創(chuàng)建一個(gè)Index.py文件,并輸出This is my first django project,這里我們需要使用django的http模塊的httpresponse函數(shù)坐輸出渲染
Index.py文件
from django.http import HttpResponse
def index(request):
return HttpResponse("This is my first django project")
urls.py文件
from django.urls import path
from . import Index
urlpatterns = [
path('', Index.index),
]
訪問效果如圖
urls或者添加path
from django.urls import path
from . import Index
urlpatterns = [
path('index/', Index.index),
]
訪問的時(shí)候加index路徑
3小作、django可以包含多個(gè)模塊亭姥,創(chuàng)建后臺管理模塊
python manage.py startapp sysadmin
執(zhí)行上面的命令會在當(dāng)前路徑下創(chuàng)建admin目錄,其目錄結(jié)構(gòu)如下所示:
init.py:一個(gè)空文件顾稀,告訴Python解釋器這個(gè)目錄應(yīng)該被視為一個(gè)Python的包达罗。
admin.py:可以用來注冊模型,用于在Django的管理界面管理模型静秆。
apps.py:當(dāng)前應(yīng)用的配置文件粮揉。
migrations:存放與模型有關(guān)的數(shù)據(jù)庫遷移信息绍载。
init.py:一個(gè)空文件,告訴Python解釋器這個(gè)目錄應(yīng)該被視為一個(gè)Python的包滔蝉。
models.py:存放應(yīng)用的數(shù)據(jù)模型击儡,即實(shí)體類及其之間的關(guān)系(MVC/MTV中的M)。
tests.py:包含測試應(yīng)用各項(xiàng)功能的測試類和測試函數(shù)蝠引。
views.py:處理請求并返回響應(yīng)的函數(shù)(MVC中的C阳谍,MTV中的V)。
sysadmin模塊下創(chuàng)建views.py視圖
from django.http import HttpResponse
def view(res):
return HttpResponse("<h1> At such a time of crisis,we must try to set aside all differences and stick together")
在新模塊下創(chuàng)建url映射匹配規(guī)則,urls.py螃概,path不填表示默認(rèn)訪問路徑為根路徑
from django.urls import path
from . import views
urlpatterns = [
path('', views.view)
]
4矫夯、接下來對新模塊的url在項(xiàng)目中進(jìn)行合并,在項(xiàng)目下urls.py使用include進(jìn)行合并,sysadmin代表模塊
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.view),
path('sysadmin/',include('sysadmin.urls') )
]
訪問效果如下圖
4吊洼、使用django模板顯示
在sysadmin模塊下創(chuàng)建list視圖view.py
from django.shortcuts import render
dict_words = [
{'word': 'diversity', 'meaning': 'the diversity of something is the fact that it contains many very different elements', 'eg': 'the cultural diversity of british society'},
{'word': 'antique', 'meaning': 'something made in an earlier period that is collected and considered to have value because it is beautiful, rare, old, or high quality', 'eg': 'My mother collects antique'},
{'word': 'stuff', 'meaning': 'You can use stuff to refer to things such as a substance, a collection of things, events, or ideas', 'eg': ' do not tell me you still believe in all that stuff'},
]
def sysadmin(res):
return render(res, 'word.html', {'dict_words': dict_words})
在模塊創(chuàng)建跳轉(zhuǎn)入口,urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.sysadmin)
]
在項(xiàng)目下創(chuàng)建templates模板目錄
<h1>This is word page</h1>
<table>
<tr>
<th>word</th>
<th>meaning</th>
<th>eg</th>
</tr>
{% for word in dict_words%}
<tr>
<td>{{word.word}}</td>
<td>{{word.meaning}}</td>
<td>{{word.eg}}</td>
</tr>
{% endfor %}
</table>
在項(xiàng)目下urls.py合并url
from django.urls import path, include
from . import view
urlpatterns = [
path('', view.index),
path('sysadmin/', include('sysadmin.urls'))
]
最后修改項(xiàng)目的默認(rèn)模板設(shè)置训貌,將創(chuàng)建的templates目錄添加到里面來
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'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',
],
},
},
]
最后啟動效果如果
6、數(shù)據(jù)庫操作
安裝數(shù)據(jù)庫模塊
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pymysql
在項(xiàng)目下init文件加入初始化數(shù)據(jù)庫代碼
import pymysql
pymysql.install_as_MySQLdb()
在setting文件配置數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫
create database lw_word default charset utf8;
新建模塊并注冊到app
pip卸載軟件
pip uninstall name
在models文件定義model模型冒窍,
from django.db import models
class Article(models.Model):
article_id = models.AutoField(primary_key=True)
title = models.TextField()
brief_content = models.TextField()
content = models.TextField()
publish = models.DateTimeField(auto_now=True)
生成遷移文件
python manage.py makemigrations
同步到數(shù)據(jù)庫
python manage.py migrate
數(shù)據(jù)庫建表完成
7递沪、使用django shell 插入數(shù)據(jù)
python manage.py shell 進(jìn)入django shell
from blog.models import Article
article = Article()
article.title = 'blog'
article.brief_content = 'provide sb for sth'
article.content = 'provide sb for sth'
article.save()
獲取數(shù)據(jù)庫的數(shù)據(jù)
articles = Article.objects.all()
article = articles[0]
article = articles[2]
print(article.content)
說明數(shù)據(jù)插入成功
provide sb for sth
8、django admin 模塊
創(chuàng)建超級管理員賬號综液。
source-shell
(venv)$ python manage.py createsuperuser
Username (leave blank to use 'tk'):tk
Email address: tk@qq.com
Password:
Password (again):
Superuser created successfully.
啟動Web服務(wù)器款慨,登錄后臺管理系統(tǒng)。
source-shell
(venv)$ python manage.py runserver
訪問[http://127.0.0.1:8000/admin](http://127.0.0.1:8000/admin)谬莹,會來到如下圖所示的登錄界面檩奠。
登錄后進(jìn)入管理員操作平臺。
至此我們還沒有看到之前創(chuàng)建的模型類附帽,需要在應(yīng)用的admin.py文件中模型進(jìn)行注冊埠戳。
注冊模型類。
(venv)$ vim blog/admin.py
from django.contrib import admin
from .models import Article
admin.site.register(Article)
注冊模型類后蕉扮,就可以在后臺管理系統(tǒng)中看到它們整胃。
打開具體對象可以查看對象屬性信息,并更改
網(wǎng)頁添加Article對象
可以看到新增的Article
為了更好的查看模型數(shù)據(jù)慢显,可以為Article模型類添加str魔法方法爪模。
響應(yīng)數(shù)據(jù)到前端
如果查詢數(shù)據(jù)提示沒有objects屬性,需要開啟django支持
python如果導(dǎo)入不了自定義包荚藻,需要設(shè)置pycharm將當(dāng)前項(xiàng)目定義為root目錄
在blog增加視圖渲染
from django.http import HttpResponse
from .models import Article
import json
Create your views here.
def blog_content(request):
articles = Article.objects.all()
article = articles[0]
title = article.title
brief_content = article.brief_content
content = article.content
id = article.article_id
date = article.publish
st = 'title: %s brief_contet: %s content: %s id %s date %s' %(title, brief_content, content, id, date)
return HttpResponse(st)
在blog應(yīng)用注冊path
在項(xiàng)目下注冊path