大数跨境
0
0

从零开始掌握Django的基础知识和实战技能,手把手教你打造自己的博客系统

从零开始掌握Django的基础知识和实战技能,手把手教你打造自己的博客系统 趣聊科技圈
2024-09-07
3
导读:本期我们将学习Django的知识,我会带你一步一步从零开始掌握基础知识和实战技能,快来学习吧!

hello,大家好,我是程序员黎明 ,本期我们将学习如何创建一个Django项目,首先我们会从安装环境开始,再到怎么搭建,然后去实现一个简单的博客系统。在学完基础知识后我会带大家做一个稍微复杂一点的Django项目,希望大家耐心学习哦!

第一章:Django是啥?

什么是Django?

简单来说,Django是一个用Python编写的Web框架,能帮助你快速搭建一个功能强大的网站。框架的意思就是它帮你做好了一些基础结构和功能,比如处理网页请求、连接数据库、用户登录和权限管理等等。你只需要在这个框架的基础上添加自己的业务逻辑,而不用从零开始写很多底层代码。

举个例子,搭网站就像盖房子,Django就像是给你提供了一套现成的模板和工具。你不需要从头设计每个砖头、每根钢筋,而是直接根据你的需求调整现有的结构,快很多。

Django的特点

  • 快速开发:它提供了很多现成的组件,比如用户管理、数据库操作,你不需要重复造轮子。
  • 可扩展性强:你可以根据需求加功能,做小项目、大项目都没问题。
  • 社区活跃:Django有庞大的开发者社区,遇到问题时容易找到答案。

第二章:如何安装Django?

安装Django很简单,但我们要保证环境配置好。下面跟着我的步骤来吧。

1. 安装Python

为什么要安装Python?

Django是用Python写的,所以我们首先需要安装Python。

如何安装Python?

  • 打开 Python官网,点击“Download Python 3.x.x”(一般会推荐最新版本)。下载完成后,运行安装包。
  • 安装时记得勾选“Add Python to PATH”,这样安装完之后可以直接在命令行中使用Python命令。

2. 安装Django

安装好Python后,接下来我们要用Python的包管理工具pip来安装Django。

打开命令行

  • Windows用户:点击“开始”菜单,输入cmd并打开命令提示符。
  • Mac和Linux用户:打开“终端”应用。

安装Django

在命令行中输入以下命令安装Django:

pip install django

pip是Python的包管理工具,类似于应用商店,Django就是其中的一个“应用”。这个命令会自动下载并安装最新版本的Django。

3. 验证安装

为了确认Django是否安装成功,我们可以查看版本号。在命令行中输入:

django-admin --version

如果看到类似4.x.x(版本号可能不同),说明Django安装成功了。

第三章:第一个简单的Django项目

接下来我们正式开始创建一个Django项目。Django项目是一个包含各种功能的网站工程,下面我们一步步创建。

1. 创建项目

在命令行中,进入你想要存放项目的文件夹,输入以下命令:

django-admin startproject mysite

这里mysite是项目名,可以根据你的实际情况换成你想要的名字,比如myblogmyshop等。

运行完命令后,Django会生成一个包含基本结构的项目目录。

2. 项目结构解读

Django生成的项目目录结构如下:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • manage.py:这是Django项目的管理工具,用它来执行各种命令,比如运行服务器、创建数据库表等。
  • mysite/(里面的文件夹名与你的项目名一致):这个目录包含项目的配置文件。
    • settings.py:项目的配置文件,所有与项目相关的设置都在这里,包括数据库配置、时区、静态文件等。
    • urls.py:定义URL路由的地方,决定用户访问某个地址时应该显示什么内容。
    • wsgi.py:与部署有关的文件(一般上线时用)。

3. 启动开发服务器

Django自带一个开发用的轻量服务器,帮助你本地测试项目。进入项目的根目录(有manage.py的地方),然后输入:

python manage.py runserver

这时命令行会提示你服务器已经启动并监听在http://127.0.0.1:8000/,然后我们打开浏览器访问这个地址,你会看到Django的默认欢迎页面,说明服务器运行成功了。

4. 自定义端口(可选)

如果你想要改变默认的端口(8000),可以指定一个新的端口号:

python manage.py runserver 8080

现在可以通过 http://127.0.0.1:8080/ 访问你的项目。

第四章:理解Django项目结构

我们来更详细地看一下Django项目的目录和每个文件的作用。

1. manage.py

manage.py是Django项目的核心管理工具。你可以用它来执行各种Django命令,比如运行服务器、进行数据库迁移、创建超级用户等。它的用法就是python manage.py 命令

2. settings.py

这个文件包含项目的所有配置选项。你需要在这里进行一些关键设置,比如:

  • DEBUG模式DEBUG = True表示调试模式,开发时开启,上线时记得关闭。
  • 数据库设置:默认使用SQLite数据库,适合小项目。以后你可以在这里改用其他数据库,如MySQL、PostgreSQL等。
  • 静态文件设置:你可以在这里配置项目的CSS、JavaScript、图片等文件的路径。

3. urls.py

Django使用URL路由系统来匹配用户请求和处理函数。urls.py定义了请求地址和相应视图的映射,比如用户访问 /blog/ 时应该显示博客首页。

4. wsgi.pyasgi.py

这两个文件和服务器部署有关,通常在本地开发时不需要动它们。wsgi.py用于传统同步服务,asgi.py用于支持异步的Web服务。

第五章:创建Django应用

我们知道Django项目通常由多个应用组成,每个应用代表一个独立的功能模块。比如一个博客项目可以有“文章管理”、“用户管理”等应用,每个应用都是一个模块。

1. 创建应用

所以在项目的根目录下,输入以下命令创建一个新的应用(比如博客应用):

python manage.py startapp blog

这样会生成一个名为blog的文件夹,里面包含以下内容:

blog/
    __init__.py
    admin.py
    apps.py
    models.py
    views.py
    tests.py
    migrations/
  • views.py:这里定义页面逻辑,当用户访问某个URL时,Django会调用相应的视图函数返回结果。
  • models.py:这里定义数据库模型,用来和数据库交互。
  • admin.py:配置后台管理页面的文件。
  • migrations/:这个文件夹存放数据库变更记录。

2. 注册应用

创建好应用后,还需要在项目中“注册”它,才能使用。在mysite/settings.py里找到INSTALLED_APPS,在列表里加入新应用的名字:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',  # 这里加上我们的blog应用
]

这样Django就知道我们新建了一个blog应用,并会把它当作项目的一部分进行处理。

第六章:写一个简单的页面

接着我们来写一个简单的页面,展示“欢迎来到我的博客首页!”

1. 定义视图(View)

视图函数是处理用户请求的地方。在blog/views.py里,写一个简单的函数,用来返回一段HTML文字:

from django.http import HttpResponse

def index(request):
    return HttpResponse("欢迎来到我的博客首页!")

这里的HttpResponse用来直接返回一段HTML内容。你可以把它看作是网页的内容。

2. 配置URL

要让用户访问某个地址时看到这个页面,我们需要在blog/urls.py里配置URL映射。在blog/文件夹下新建一个urls.py文件,内容如下:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index),  # 根路径对应index视图
]

然后,我们还需要把这个blog应用的URL映射添加到项目的主URL配置中。在mysite/urls.py

,添加一行:

from django.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),  # 把blog的URL包含进来
]

这样,访问 http://127.0.0.1:8000/blog/ 时,就会调用blog/views.py里的index函数,并显示“欢迎来到我的博客首页!”。


这样,我们的项目就搭建完成啦,但是这个会比较简单一点,接下来我们将做一个稍微复杂一些的Django项目:多用户博客系统。这个项目包括用户注册、登录、发布文章、评论系统等功能。在这个过程中,我们会用到Django的多个高级特性,如模型、表单、用户认证系统、关系数据库操作等。

复杂一点的Django项目

项目功能概述:

  1. 用户系统:支持用户注册、登录、注销功能。
  2. 博客系统:用户可以发布、编辑、删除博客文章。
  3. 评论系统:允许用户在博客文章下发表评论。
  4. 管理员后台:管理员可以通过Django自带的后台管理所有内容。
  5. 文章分类:支持按分类查看文章。

开始之前

在开始前要确保你已经安装了Django,并创建了一个Django项目。假设项目名为blog_project,应用名为blog

第一步:创建Django项目和应用

  1. 创建项目

    django-admin startproject blog_project
  2. 创建应用:进入blog_project目录,然后创建一个名为blog的应用:

    python manage.py startapp blog
  3. 注册应用:打开blog_project/settings.py,在INSTALLED_APPS中添加blog应用:

    INSTALLED_APPS = [
        # ... 其他默认应用
        'blog',
    ]

第二步:设计数据库模型

我们需要定义三个模型:

  • Article:表示博客文章。
  • Category:表示文章分类。
  • Comment:表示文章下的评论。
  1. **定义文章模型 (Article)**:打开blog/models.py,定义如下的模型:

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

    class Category(models.Model):
        name = models.CharField(max_length=100, unique=True)

        def __str__(self):
            return self.name

    class Article(models.Model):
        title = models.CharField(max_length=200)
        content = models.TextField()
        author = models.ForeignKey(User, on_delete=models.CASCADE)
        category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
        created_at = models.DateTimeField(default=timezone.now)
        updated_at = models.DateTimeField(auto_now=True)

        def __str__(self):
            return self.title

    class Comment(models.Model):
        article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='comments')
        user = models.ForeignKey(User, on_delete=models.CASCADE)
        content = models.TextField()
        created_at = models.DateTimeField(default=timezone.now)

        def __str__(self):
            return f"Comment by {self.user} on {self.article}"
  2. 运行迁移:Django使用迁移系统来同步数据库。我们首先需要创建数据库迁移文件,然后应用这些迁移:

    python manage.py makemigrations
    python manage.py migrate

第三步:创建用户系统

Django自带了非常方便的用户系统。我们只需要稍微配置一下,就可以实现用户注册、登录、注销等功能。

  1. 用户注册视图:在blog/views.py中,添加用户注册功能:

    from django.shortcuts import render, redirect
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib.auth import login

    def register(request):
        if request.method == 'POST':
            form = UserCreationForm(request.POST)
            if form.is_valid():
                user = form.save()
                login(request, user)
                return redirect('blog:article_list')
        else:
            form = UserCreationForm()
        return render(request, 'blog/register.html', {'form': form})
  2. 用户登录视图:Django提供了现成的登录视图,我们可以直接使用。

  3. 用户注销视图:同样,Django也有现成的注销功能。

  4. 创建URL路由:在blog/urls.py中,添加注册、登录、注销的URL路由:

    from django.urls import path
    from django.contrib.auth import views as auth_views
    from . import views

    urlpatterns = [
        path('register/', views.register, name='register'),
        path('login/', auth_views.LoginView.as_view(template_name='blog/login.html'), name='login'),
        path('logout/', auth_views.LogoutView.as_view(), name='logout'),
    ]
  5. 用户注册模板:在blog/templates/blog/目录下创建register.html

    <h2>注册</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">注册</button>
    </form>
  6. 用户登录模板:创建login.html

    <h2>登录</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">登录</button>
    </form>

第四步:实现博客功能

我们接下来实现博客文章的发布、编辑和显示功能。

  1. 文章列表视图:在views.py中添加显示文章列表的视图:

    from .models import Article

    def article_list(request):
        articles = Article.objects.all()
        return render(request, 'blog/article_list.html', {'articles': articles})
  2. 文章详情视图:用于显示单篇文章的内容:

    from django.shortcuts import get_object_or_404

    def article_detail(request, pk):
        article = get_object_or_404(Article, pk=pk)
        return render(request, 'blog/article_detail.html', {'article': article})
  3. URL路由:在urls.py中添加文章列表和详情页的路由:

    urlpatterns += [
        path('articles/', views.article_list, name='article_list'),
        path('articles/<int:pk>/', views.article_detail, name='article_detail'),
    ]
  4. 文章模板

    • 文章列表模板 article_list.html
      <h2>文章列表</h2>
      <ul>
          {% for article in articles %}
          <li>
              <a href="{% url 'blog:article_detail' article.pk %}">{{ article.title }}</a>
              by {{ article.author }}
          </li>
          {% endfor %}
      </ul>
    • 文章详情模板 article_detail.html
      <h2>{{ article.title }}</h2>
      <p>{{ article.content }}</p>
      <p>作者:{{ article.author }} | 发布于:{{ article.created_at }}</p>

第五步:评论功能

  1. 评论表单:在forms.py中定义评论表单:

    from django import forms
    from .models import Comment

    class CommentForm(forms.ModelForm):
        class Meta:
            model = Comment
            fields = ['content']
  2. 评论视图:在views.py中实现评论功能:

    from .forms import CommentForm

    def article_detail(request, pk):
        article = get_object_or_404(Article, pk=pk)
        comments = article.comments.all()
        if request.method == 'POST':
            form = CommentForm(request.POST)
            if form.is_valid():
                comment = form.save(commit=False)
                comment.article = article
                comment.user = request.user
                comment.save()
                return redirect('blog:article_detail', pk=pk)
        else:
            form = CommentForm()
        return render(request, 'blog/article_detail.html', {
            'article': article,
            'comments': comments,
            'form': form
        })
  3. 文章详情页展示评论:修改article_detail.html,展示评论和评论表单:

    <h2>{{ article.title }}</h2>
    <p>{{ article.content }}</p>

    <h3>评论</h3>
    <ul>
        {% for comment in comments %}
        <li>{{ comment.user }}: {{ comment.content }}</li>
        {% endfor %}
    </ul>

    <h3>发表评论</h3>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">提交</button>
    </form>

总结

到这里,我们已经完成了一个较为复杂的Django博客项目,包含了用户注册登录、文章发布、评论功能等。学到这里,我给大家留了一个作业,这个项目可以继续扩展,比如添加分页、文章标签、文章搜索等功能。希望大家学以致用!好了,本期我们就学到这里啦,我们下期不见不散!


【声明】内容源于网络
0
0
趣聊科技圈
🧐探索科技,发现乐趣。🤩带你玩遍科技好物!
内容 511
粉丝 0
趣聊科技圈 🧐探索科技,发现乐趣。🤩带你玩遍科技好物!
总阅读642
粉丝0
内容511