Django入門
Django入門
一.新建index頁面
1.新建項目
使用manage.py創建一個blog這裏會出現新的一個應用
python manage.py startapp blog
文件名 | 描述 |
---|---|
init.py | 告訴Python 這是一個包 |
apps.py | 在新的Django 版本中新增,用於應用程序的配置。 |
admin.py | 映射models 中的數據到Django 自帶的admin 後臺 |
models.py | 數據模型——對應數據庫的相關操作 |
tests.py | 單元測試 |
views.py | 視圖函數(即MVC 中的控制器)——控制向前端顯示哪些數據。 |
migrations | 這是一個包,用於記錄models中的數據變更 |
2.把這個應用加入到Django的項目中
在項目文件的setting.py中。將應用名稱(blog)添加到元組的末尾,如下所示。
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
······
'blog',
)
3.新建一個urls
在項目的urls文件中配置我們blog應用的index頁
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/',views.archive),
path('index/',views.index)
]
4.編寫對應的index函數
在blog應用的view文件新建
def index(request):
return HttpResponse("Hello Django!")
5.請求路徑
在瀏覽器輸入以下就可以訪問
http://localhost:8000/index/
http://127.0.0.1:8000/index/
二.新建一個模板index頁面
對於一個頁面可以使用更加好的模塊來展示,可以使用html展示
1.新建一個html
在對應目錄創建templates/index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Django Page</title>
</head>
<body>
<h1>Hello Django!</h1>
</body>
</html>
2.修改view中返回數據
原先
def index(request):
return HttpResponse("Hello Django!")
修改之後
from django.shortcuts import render
def index(request):
return render(request,"index.html")
這裏使用Django模塊的render函數
Django 工作流
- 1.urls.py 中urlpatterns添加路徑,確定跳轉的項目函數
- 2.在項目的新增對應的函數
- 3.在函數中加載已有 html文檔
三.開發模式
MTV開發模式:也就是把數據和表現邏輯分割開的邏輯
MVC模式
Model-View-Controller(MVC):
-
Model 代表數據存取層,
-
View 代表的是系統中選擇顯示什麼和怎麼顯示的部分
-
Controller 指的是系統中根據用戶輸入並視需要訪問模型,以決定使用哪個視圖的那部分。
-
但是在Django中使用的是MTV模式:
是模型(Model)、模板(Template)和視圖(Views),
四.新建一個Blog
1.新建一個博客模型
使用model 文件用於存放數據模型,這裏使用了blog的模型
class BlogPost(models.Model):
title = models.CharField(max_length=150)
body = models.TextField()
timestamp = models.DateTimeField()
這裏新建了一個BlogPost類,並添加了博客裏面的屬性。
- title:用CharField類型,並限制了最大長度
- body:使用TextField類型
- timestamp:使用dataTimeField 類型
2.Model轉換成中間件
在項目cmd中輸入
python manage.py makemigrations
會出現以下結果
Migrations for 'blog':
blog\migrations\0001_initial.py
- Create model BlogPost
可以看到blog項目新建了一個BlogPost的類
3.數據SQLite
Django默認的就是
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/tmp/mysite.db', # use full pathname to avoid confusion
}
}
3.生成blog的表
然後Django需要使用上面給出的鏈接信息來連接數據庫,這裏需要設置應用程序需要的表。
python manage.py syncdb
這裏輸入之後cmd表示syncdb命令不存在。因爲Django1.9之後該命令被刪除,所以,需要使用migrate命令替代syncdb
python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
Applying blog.0001_initial... OK
4.註冊數據庫表
在admin賬號登錄之後是沒有看到用戶類的
需要在blog項目的admin文件中註冊
from blog.models import BlogPost
class BlogPostAdmin(admin.ModelAdmin):
list_display = ('title','timestamp')
admin.site.register(BlogPost,BlogPostAdmin)
在之前的註冊的模塊是BlogPost,所以在admin的頁面展示的也是BlogPost
5.配置html模板
在應用中新建一個archive.html文件用於存放模板
\blog\templates\archive.html
文件內容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- archive.html -->
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp }}</p>
<p>{{ post.body }}</p>
<hr>
{% endfor %}
</body>
</html>
6.配置urls路徑
修改項目的urls路徑
from blog.views import archive
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/',archive)
]
7.虛假視圖展示
在view文件中配置
def archive(request):
post = BlogPost(title='mocktitle', body='mockbody',
timestamp=datetime.now())
return render_to_response('archive.html', {'posts': [post]})
使用虛假視圖驗證之後發現沒有問題就可以換成真實視圖
8.真實視圖展示
在view文件修改成
from blog.models import BlogPost
def archive(request):
posts = BlogPost.objects.all()
return render_to_response('archive.html', {'posts': posts})