使用Django搭建我的博客網站

建立項目

首先要在命令行建立Django項目:html

$ django-admin startproject my_blog

初始化設置

my_blog/my_blog/setting.py中修改下面幾個選項:python

clipboard.png

添加等待要建立的應用:mysql

clipboard.png

建立應用

如今來建立博客應用
進入剛剛建立的my_blog項目後執行:sql

$ python manage.py startapp blog

能夠看到已經建立了blog應用數據庫

clipboard.png

建立模型與數據庫

使用mysql數據庫

這個坑留着,先用自帶的sqlite。
連接:https://blog.csdn.net/mildddd...django

編寫模型

打開my_blog/blog/models.py添加以下內容:瀏覽器

from django.db import models
from django.contrib.auth.models import User

# Create your models here.


class BlogType(models.Model):
    type_name = models.CharField(max_length=50)

    def __str__(self):
        return self.type_name  # 顯示標題類型


class Blog(models.Model):
    title = models.CharField(max_length=50) # 標題
    blog_type = models.ForeignKey(BlogType,on_delete=models.DO_NOTHING) # 標題類型
    author = models.ForeignKey(User,on_delete=models.DO_NOTHING) # 做者
    content = models.TextField() # 文章內容
    created_time = models.DateTimeField(auto_now_add=True) # 建立時間
    last_updated_time = models.DateTimeField(auto_now_add=True) # 上一次更新時間

    def __str__(self):
        return "<Blog: %s>" % self.title # 顯示標題

clipboard.png

注意:想要應用同一文件的類,要把被引用的類放在應用這個類的類以前。例如這裏要把BlogType類放在Blog類以前。服務器

初始化數據庫

先進行數據庫遷移:session

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
....

再來建立管理員:app

$ python manage.py createsuperuser
:(輸入用戶名)root
:(輸入郵箱)[[:blank:]] // 這裏不須要能夠直接空格
:(輸入密碼) zxc123456 // 太簡單的密碼不容許
:(重複密碼) zxc123456
Superuser created successfully.

而後建立數據庫:

$ python manage.py makemigrations
Migrations for 'blog':
  blog\migrations\0001_initial.py
    - Create model Blog
    - Create model BlogType
    - Add field blog_type to blog

編寫管理界面

編輯my_blog/blog/admin.py:

from django.contrib import admin
from .models import Blog,BlogType # 引入模型


@admin.register(BlogType)
class BlogTypeAdmin(admin.ModelAdmin):
    list_display = ('id','type_name')  # 顯示的內容


@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
    list_display = ('title','blog_type','author','created_time','last_updated_time')  # 顯示的內容

clipboard.png

編寫視圖

編寫my_blog/blog/views.py

from django.shortcuts import render_to_response, get_object_or_404
from .models import Blog  # 引入models.py文件下的Blog模型


def blog_list(request):
    context = {}
    context['blog'] = Blog.objects.all() # 博客列表
    return render_to_response('blog_list.html',context)


def blog_detail(request,blog_pk):
    context = {}
    context['blog'] = get_object_or_404(Blog,pk=blog_pk) # 博客內容
    return render_to_response('blog_detail.html',context)

而後在blog目錄下建立一個templates的文件夾,視圖都將存放在裏面。在裏面建立blog_detail.htmlblog_list.html
blog_detail.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>{{ blog.title }}</title>
</head>
<body>
    <div>
        <a href="{% url 'home' %}">
            <h3>My Blog</h3>
        </a>
    </div>
    <h3>{{ blog.title }}</h3>
    <p>{{ blog.content }}</p>
</body>
</html>

blog_list.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>My Blog</title>
</head>
<body>
    {% for blog in blogs %}
        <a href="{% url 'blog_detail' blog.pk %}">
            <h3>{{ blog.title }}</h3>
        </a>
        
        <p>{{ blog.content }}</p>
    {% endfor %}
</body>
</html>

編寫訪問路徑

my_blog/blog/目錄下建立urls.py

from django.urls import path
from . import views

urlpatterns = [
    # http://localhost:8000/blog/#
    path('<int:blog_pk>',views.blog_detail,name="article_detail"),
]

clipboard.png

再去my_blog/my_blog/urls.py中設置:

clipboard.png

啓動服務器

而後能夠進管理界面查看效果了:

$ python manage.py runserver

瀏覽器輸入:

http://127.0.0.1:8000/admin

輸入剛剛的帳號和密碼

相關文章
相關標籤/搜索