django入門
阿新 • • 發佈:2020-07-13
django venv
- 安裝python
- 安裝vscode
- 建立虛擬環境;python -m venv .venv_hero
- 建立並進入目錄:mkdir pro_test1
- 啟用選擇虛擬環境:activate
- 建立專案:pip install django==2.0,django-admin startproject test1
- 建立app:cd test1,django-admin startapp booktest
- 設定settings.py:加入booktest
django models
- 定義模型類:booktest/models.py
from django.db import models # Create your models here. class BookInfo(models.Model): title=models.CharField(max_length=20) pub_date=models.DateField() ## 返回資訊能夠檢視 def __str__(self): return self.title # return self.title.encode('utf-8') class HeroInfo(models.Model): name=models.CharField(max_length=20) content=models.CharField(max_length=100) gender=models.BooleanField(default=True) book=models.ForeignKey(BookInfo,on_delete=models.DO_NOTHING) # def __str__(self): # return self.name
-
生產遷移檔案(名詞:相當於sql語句檔案):python manage.py makemigrations
-
執行遷移檔案(建立資料庫,生成表的操作):python manage.py migrate --- 會生成db.sqlite3資料庫
-
使用shell操作:python manage.py shell
## 查詢 python manage.py shell from booktest.models import BookInfo BookInfo.objects.all() ## 插入 b=BookInfo() b.title='射鵰英雄傳' from datetime import date b.pub_date=date(2020,7,12) b.save() BookInfo.objects.all() b=BookInfo() b.title='神鵰俠侶' from datetime import date b.pub_date=date(2020,7,12) b.save() BookInfo.objects.all() ## 修改 b=BookInfo.objects.get(id=1) b.title='神鵰俠侶' b.save() BookInfo.objects.all() from booktest.models import HeroInfo h=HeroInfo() h.name='郭靖' h.gender=True h.content='降龍十八掌' h.book=BookInfo.objects.get(id=1) ## 外來鍵關係 h.save() HeroInfo.objects.all()
django admin
- 建立超級使用者:python manage.py createsuperuser
python manage.py createsuperuser
Username (leave blank to use 'zhangfd'): admin
Email address: [email protected]
Password:admin123456
Password (again):admin123456
Superuser created successfully.
- 進入後臺:python manage.py runserver
LANGUAGE_CODE = 'zh_Hans' ## zh_Hans --中文 TIME_ZONE = 'Asia/Shanghai' ## Asia/Shanghai
- 註冊模型類:admin.py
from django.contrib import admin
from .models import *
# Register your models here.
## 定義後臺顯示資訊
class BookInfoAdmin(admin.ModelAdmin):
list_display=['id','title','pub_data']
class HeroInfoAdmin(admin.ModelAdmin):
list_display=['id','name','content','gender','book']
## 對模型類進行註冊後才能在後臺檢視到資訊
admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(HeroInfo,HeroInfoAdmin)
django views + urls
- views.py即函式
from django.shortcuts import render
from django.http import HttpResponse ## 此處只用做功能介紹,實際中用render返回
# Create your views here.
## HTTPRequest
def index(request):
## HttpResponse
return HttpResponse("hello world") ## 此處只用做功能介紹,實際中用render返回
- 設定urls
## 分析
#- def main():
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'test1.settings')
#- test1.settings:
# ROOT_URLCONF = 'test1.urls'
#- test1.urls:
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('booktest.urls')),
]
#- booktest.urls
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index,name="index"),
]
django templates
- 建立目錄:project_name/templates/app_name1/
- 模板檔案:test1/templates/booktest/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }}</title>
</head>
<body>
<h1>hello world!</h1>
<hr>
{% for i in list %}
<h3>{{i}}</h3>
{% endfor %}
</body>
</html>
- 編寫返回頁面檢視:views.py
from django.shortcuts import render
# from django.http import HttpResponse
# Create your views here.
## HTTPRequest
def index(request):
context={'title':'django首頁','list':range(10)} ## 多個欄位需要傳入html時,可以考慮字典
# return HttpResponse("hello world")
return render(request,'booktest/index.html',context) ## context為傳入HTML的引數
- 設定模板路徑:settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')], ## templates模板路徑拼接
...
}
- django 支援的模板語言
<title>{{ title }}</title> ## 變數
{% for i in list %} ## 迴圈
<h3>{{i}}</h3>
{% endfor %}
django models + views + templates
- views.py
#coding=utf-8
from django.shortcuts import render
from .models import *
# from django.http import HttpResponse
# Create your views here.
## HTTPRequest
def index(request):
#context={'title':'django首頁','list':range(10)} ## 多個欄位需要傳入html時,可以考慮字典
# return HttpResponse("hello world")
list = BookInfo.objects.all()
context = {'booklist':list}
return render(request,'booktest/index2.html',context)
def detail(request,id): ## id 用來接收url.py中匹配到的數字
print(id)
list = BookInfo.objects.get(id=id).HeroInfo_set() ## 使用網頁傳過來的值,找到BookInfo中對應的一本書
## 反向獲取引用bookInfo的所有HeroInfo資訊
## HeroInfo中的book欄位設定為外來鍵,是BookInfo中title
context = {'herolist':list}
return render(request,'booktest/detail.html',context)
- index2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=, initial-scale=1.0">
<title>圖書列表</title>
</head>
<body>
<ul>
{% for book in booklist %}
<li><a href="/{{ book.id }}">{{ book.title }}</a></li>
{% endfor %}
</ul>
</body>
</html>
- detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>英雄資訊</title>
</head>
<body>
<a href="/">首頁</a>
<hr>
<ul>
{% for hero in herolist %}
<li>{{hero.name}}</li>
{%endfor%}
</ul>
</body>
</html>
- urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index),
## 網頁訪問:http://127.0.0.1:8000/1,http://127.0.0.1:8000/2 ..
path('(\d+)',views.detail), ## ()提取數字:\d+ 從url頁面獲取的數字,在views中使用變數如id接收
]