Web实战丨基于Django与HTML的新闻发布系统

简介: Web实战丨基于Django与HTML的新闻发布系统

写在前面

本期内容:基于Django与HTML的简单新闻发布系统。

项目需求:Python+Django

项目简介

本期博主将带着大家用Django完成一个简单的新闻发布系统,该新闻发布系统具有“登录界面”,“注册界面”,“新闻界面”以及“后台界面”。

项目框架

  • 用户注册界面:用户可以注册自己的信息,用于登录系统。
  • 用户登录界面:登录系统的界面,验证用户的登录信息是否合法。
  • 新闻信息界面:展示新闻的信息。
  • 后台管理界面:管理员可以发布新闻,修改和删除新闻信息。

实验内容

安装依赖库

  • Django(如未安装django库,可以运行以下命令进行安装)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
• 1

1.创建项目

  1. 使用以下命令新建一个名为newsProject的项目
django-admin startproject newsProject
• 1
  1. 进入newsProject项目,使用以下命令新建一个名为news的app
cd newsProject
django-admin startapp news

2.系统配置

  1. 双击打开newsProject文件夹中的settings.py文件

  1. INSTALLED_APPS中添加news

  1. 双击打开"newsProject"文件夹下的"urls.py"文件,配置项目的导航路径

from django.contrib import admin
from django.urls import path
from news import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home),
    path('regist/', views.regist),
    path('login/', views.login),
    path('logout/', views.logout),
    path('article/', views.article),
    path('<int:id>/', views.detail, name='detail'),
]

注意代码里的views可能会爆红,这是因为我们还没有配置"views"视图文件,下面就让我们一起来配置一下吧~

3.配置视图文件

双击打开"news"目录下的"views.py"文件,配置项目的视图函数

from django.shortcuts import render, redirect
from django.http import HttpResponse, Http404
from .models import Article
from django.contrib import auth
from django import forms 
from django.contrib.auth.models import User  


class UserForm(forms.Form):
    username = forms.CharField(label='用户名', max_length=100)
    password = forms.CharField(label='密 码', widget=forms.PasswordInput())

# 主界面
def home(request):
    return render(request, 'home.html')

# 用户注册界面
def regist(request):
    if request.method == 'POST':
        uf = UserForm(request.POST)  # 包含用户名和密码
        if uf.is_valid():
            # 获取表单数据
            username = uf.cleaned_data['username']  # cleaned_data类型是字典,里面是提交成功后的信息
            password = uf.cleaned_data['password']
            # 添加到数据库
            registAdd = None
            try:
                registAdd = User.objects.create_user(username=username, password=password)
                return render(request, 'regists.html', {'registAdd': registAdd})
            except:
                return render(request, 'regists.html', {'registAdd': registAdd, 'username': username})

    else:
        # 如果不是post提交数据,就不传参数创建对象,并将对象返回给前台,直接生成input标签,内容为空
        uf = UserForm()

    return render(request, 'regist.html', {'uf': uf})


def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        match = auth.authenticate(username=username, password=password)  # 用户认证
        if match is not None:  # 如果数据库里有记录(即与数据库里的数据相匹配或者对应或者符合)
            auth.login(request, match)  # 登陆成功
            return redirect('/', {'user': match})  # 跳转--redirect指从一个旧的url转到一个新的url
        else:  # 数据库里不存在与之对应的数据
            return render(request, 'login.html', {'login_error': '用户名或密码错误'})  # 登录失败
    return render(request, 'login.html')


def logout(request):
    auth.logout(request)
    return render(request, 'home.html')


def article(request):
    article_list = Article.objects.all()
    # QuerySet是一个可遍历结构,包含一个或多个元素,每个元素都是一个Model实例
    # QuerySet类似于Python中的list,list的一些方法QuerySet也有,比如切片,遍历。
    # 每个Model都有一个默认的manager实例,名为objects,QuerySet有两种来源:通过manager的方法得到、通过QuerySet的方法得到。mananger的方法和QuerySet的方法大部分同名,同意思,如filter(),update()等,但也有些不同,如manager有create()、get_or_create(),而QuerySet有delete()等
    return render(request, 'article.html', {'article_list': article_list})


def detail(request, id):
    try:
        article = Article.objects.get(id=id)
        # print type(article)
    except Article.DoesNotExist:
        raise Http404
    return render(request, 'detail.html', locals())

该段代码是一个基于Django框架的用户注册和登录功能实现。主要包含以下几个函数:

  1. home(request): 主界面,渲染home.html模板。
  2. regist(request): 用户注册界面。如果请求为POST方法,从表单中获取用户名和密码,将其添加到数据库中创建新用户。如果注册成功,渲染regists.html模板并传递注册成功的信息。如果注册失败,渲染regists.html模板并传递错误信息。如果请求为GET方法,直接渲染regist.html模板。
  3. login(request): 用户登录界面。如果请求为POST方法,从表单中获取用户名和密码,使用auth.authenticate()函数进行用户认证。如果认证成功,调用auth.login()函数进行登录并重定向到主页。如果认证失败,渲染login.html模板并传递错误信息。
  4. logout(request): 用户注销功能。调用auth.logout()函数进行注销,并渲染home.html模板。
  5. article(request): 文章列表页面。从数据库中获取所有文章对象,并渲染article.html模板并传递文章列表。
  6. detail(request, id): 文章详情页面。根据文章的id从数据库中获取对应的文章对象,并渲染detail.html模板并传递文章对象。

注意:此时的"Article"会爆红,因为我们还没有配置"models.py"模型文件哦

4.配置模型文件

接下来我们就来配置"news"的"models.py"模型文件吧

from django.db import models

class Article(models.Model):
    title = models.CharField('标题', max_length=256)
    content = models.TextField('内容')
    pub_date = models.DateTimeField('发表时间', auto_now_add=True, editable=True)
    update_time = models.DateTimeField('更新时间', auto_now=True, null=True)

    def __str__(self):
        return self.title

该代码段定义了一个名为Article的模型类,用于表示文章对象。


该模型类继承自Django提供的models.Model基类,以便使用Django的数据库功能。


模型类包含以下几个字段:


  1. title: 标题字段,使用CharField类型,最大长度为256字符。


  1. content: 内容字段,使用TextField类型,可以存储较长的文本内容。


  1. pub_date: 发表时间字段,使用DateTimeField类型,自动记录发表时间,并设置为只读(不可编辑)。


  1. update_time: 更新时间字段,使用DateTimeField类型,自动记录最后更新时间,并在更新时进行更新,允许为空。


模型类还定义了一个__str__()方法,用于在对象被打印或字符串表示时返回标题字段的值。


该模型类的目的是在数据库中创建一个名为Article的表,用于存储文章的相关信息,如标题、内容、发表时间和更新时间等。


通过使用该模型类,可以方便地对文章对象进行创建、查询、更新和删除操作。

5.配置管理员文件

最后我们需要配置一下"news"里的"admin.py"文件

from django.contrib import admin
from news.models import Article
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title','pub_date', 'update_time',)
admin.site.register(Article, ArticleAdmin)

这段代码是在Django的admin.py文件中注册一个模型(Model)并配置相应的管理选项。


首先,我们导入了admin模块,并导入了Article模型(假设该模型定义在news.models文件中)。


然后,我们定义了一个名为ArticleAdmin的类,继承自admin.ModelAdmin。该类用于配置Article模型在Django admin后台的显示和操作选项。


在这个类中,我们设置了list_display属性,它是一个包含模型字段名称的元组。这个属性指定了在Django admin后台中列表视图显示的字段。在这个例子中,我们指定了’title’(标题)、‘pub_date’(发布日期)和’update_time’(更新时间)。


最后,我们调用admin.site.register()方法,将Article模型和ArticleAdmin类进行注册。这告诉Django admin后台要管理Article模型,并使用ArticleAdmin类中指定的配置选项。


通过这段代码,您就可以在Django admin后台中管理Article模型,并可以根据设置的list_display属性在列表视图中显示指定的字段。



Web实战丨基于Django与HTML的新闻发布系统:

目录
相关文章
|
5天前
|
API 数据库 开发者
深度剖析Django/Flask:解锁Web开发新姿势,让创意无限延伸!
在Web开发领域,Django与Flask如同两颗璀璨的星辰,各具特色。Django提供全栈解决方案,适合快速开发复杂应用;Flask则轻量灵活,适合小型项目和API开发。本文通过问答形式,深入解析两大框架的使用方法和选择策略,助你解锁Web开发新技能。
14 2
|
30天前
|
机器学习/深度学习 数据处理 数据库
基于Django的深度学习视频分类Web系统
基于Django的深度学习视频分类Web系统
51 4
基于Django的深度学习视频分类Web系统
|
30天前
|
数据库 数据库管理 Python
#736421#基于django的个人博客系统
#736421#基于django的个人博客系统
36 4
#736421#基于django的个人博客系统
|
11天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
93 1
|
30天前
|
机器学习/深度学习 监控 数据挖掘
基于Django和百度飞桨模型的情感识别Web系统
基于Django和百度飞桨模型的情感识别Web系统
36 5
|
30天前
|
数据库 数据库管理 Python
#73623#基于django的园区对比系统
#73623#基于django的园区对比系统
34 4
|
28天前
|
数据库 数据安全/隐私保护 数据库管理
#765372#基于django和neo4j的通用数据展示系统
#765372#基于django和neo4j的通用数据展示系统
20 1
|
28天前
|
NoSQL 关系型数据库 MongoDB
Django与MongoDB搭建高效的Web应用
Django与MongoDB搭建高效的Web应用
25 1
|
26天前
|
移动开发 前端开发 JavaScript
HTML与现代Web开发的不同技术
【10月更文挑战第11天】HTML与现代Web开发的不同技术
18 0
|
28天前
|
BI Python
基于django的代理商订单管理系统
基于django的代理商订单管理系统
17 0
下一篇
无影云桌面