1.安装`django、mysqlclient`库:
pip install django mysqlclient -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
2.创建项目和应用:
django-admin startproject mysite cd mysite python manage.py startapp blog
3.在`mysite/settings.py`中配置MySQL数据库和注册应用:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'myuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '3306', } } INSTALLED_APPS = [ ...... 'blog', ]
4.在`blog/models.py`文件中创建模型:
from django.db import models class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() pub_date = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title
5.创建数据表(根据模型迁移数据):
python manage.py makemigrations python manage.py migrate
6.创建`blog/forms.py`文件,并在其中创建表单,用来处理文章发布:
from django import forms from .models import Article class ArticleForm(forms.ModelForm): class Meta: model = Article fields = ['title', 'content'] widgets = { 'title': forms.TextInput(attrs={'class': 'form-control'}), 'content': forms.Textarea(attrs={'class': 'form-control'}), }
7.在`blog/views.py`文件中创建视图,用来处理文章的发布和浏览:
from django.shortcuts import render, redirect, get_object_or_404 from .models import Article from .forms import ArticleForm def article_list(request): articles = Article.objects.all() return render(request, 'blog/article_list.html', {'articles': articles}) def article_create(request): if request.method == 'POST': form = ArticleForm(request.POST) if form.is_valid(): form.save() return redirect('article_list') else: form = ArticleForm() return render(request, 'blog/article_create.html', {'form': form}) def article_detail(request, article_id): article = get_object_or_404(Article, id=article_id) return render(request, 'blog/article_detail.html', {'article': article})
8.创建`blog/templates/blog`目录,并在下面创建三个模板文件:
文章列表`article_list.html`:
{% extends 'base.html' %} {% block content %} <h2>文章列表</h2> <ul> {% for article in articles %} <li> <a href="{% url 'article_detail' article.id %}">{{ article.title }}</a> <small> {{ article.pub_date }}</small> </li> {% endfor %} </ul> <a href="{% url 'article_create' %}">发布新文章</a> {% endblock %}
发布文章`article_create.html`:
{% extends 'base.html' %} {% block content %} <h2>发布新文章</h2> <form method="post"> {% csrf_token %} <div> <label for="id_title">标题:</label> <div>{{ form.title }}</div> </div> <div> <label for="id_content">内容:</label> <div>{{ form.content }}</div> </div> <button>返回</button> <button type="submit">提交</button> </form> {% endblock %}
文章详情`article_detail.html`:
{% extends 'base.html' %} {% block content %} <h1>{{ article.title }}</h1> <div> <span> {{ article.pub_date }}</span> <a href="#"><i></i> </a> <a href="#"><i></i> </a> <a href="#"><i></i> </a> </div> <p>{{ article.content }}</p> <a href="#">上一篇</a> <a href="#">下一篇</a> {% endblock %}
9.创建`mysite/templates/base.html`基础模板,用于bootstrap美化页面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>示例网站</title> <!-- CSS --> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.2/css/bootstrap.min.css"> </head> <body> <nav> <div> <a href="/">示例网站</a> <div id="navbarScroll"> <ul style="max-height: 100px;"> <li><a href="/">主页</a></li> <li><a href="#">移动</a></li> <li><a href="#">铁通</a></li> <li><a href="#">IDC</a></li> <li><a href="#">信安</a></li> <li><a href="#">政企云</a></li> </ul> <form> <input type="search" placeholder="输入关键字" aria-label="Search"> <button type="submit">search</button> </form> </div> </div> </nav> <div> {% block content %} {% endblock %} </div> </body> </html>
10.在 `mysite/urls.py` 文件中配置路由:
from django.urls import path from blog.views import article_create, article_list, article_detail urlpatterns = [ path('', article_list, name='article_list'), path('create/', article_create, name='article_create'), path('detail/<int:article_id>/', article_detail, name='article_detail'), ]
11.运行Django开发服务器来查看的网站:
python manage.py runserver
在浏览器中访问`http://127.0.0.1:8000/`,你应该可以看到文章列表页面。