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的新闻发布系统:

目录
相关文章
|
11天前
|
开发框架 数据库 开发者
Web开发新境界:用Python玩转Django和Flask!
【6月更文挑战第12天】Python的Web开发框架Django和Flask各有千秋。Django是全能型框架,适合快速开发大型应用,提供ORM、模板引擎、URL路由和后台管理等全面功能。Flask则轻量级且灵活,适用于小型到中型应用,以其简单易用、高度可扩展和灵活路由著称。两者结合使用,能应对各种Web开发需求。
|
10天前
|
传感器 小程序 搜索推荐
(源码)java开发的一套(智慧校园系统源码、电子班牌、原生小程序开发)多端展示:web端、saas端、家长端、教师端
通过电子班牌设备和智慧校园数据平台的统一管理,在电子班牌上,班牌展示、学生上课刷卡考勤、考勤状况汇总展示,课表展示,考场管理,请假管理,成绩查询,考试优秀标兵展示、校园通知展示,班级文化各片展示等多种化展示。
34 0
(源码)java开发的一套(智慧校园系统源码、电子班牌、原生小程序开发)多端展示:web端、saas端、家长端、教师端
|
2天前
|
前端开发 安全 数据安全/隐私保护
杨校老师课堂之WEB前端HTML2
杨校老师课堂之WEB前端HTML
16 0
|
2天前
|
XML 移动开发 前端开发
杨校老师课堂之WEB前端HTML1
杨校老师课堂之WEB前端HTML
21 0
|
8天前
|
前端开发 JavaScript Java
计算机Java项目|基于Web的足球青训俱乐部管理后台系统的设计与开发
计算机Java项目|基于Web的足球青训俱乐部管理后台系统的设计与开发
|
11天前
|
JSON 安全 关系型数据库
Web实战丨基于django+hitcount的网页计数器
Web实战丨基于django+hitcount的网页计数器
23 5
|
1天前
|
机器学习/深度学习 Web App开发 前端开发
【Web开发】深度学习HTML(超详细,一篇就够了)
【Web开发】深度学习HTML(超详细,一篇就够了)
4 0
|
11天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的高校疫情防控web系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的高校疫情防控web系统附带文章源码部署视频讲解等
13 0
|
5天前
|
前端开发 JavaScript PHP
PHP与现代Web开发:探索PHP的持续演变
在动态Web开发的舞台上,PHP一直是一个不可或缺的角色。从早期的简单个人网页到复杂的企业级应用,PHP经历了无数次变革,以适应不断变化的技术需求。本文将带您了解PHP如何保持其在Web开发中的核心地位,以及它如何应对新兴技术的挑战。
|
5天前
|
前端开发 JavaScript 开发工具
Web前端开发学习资料:深度探索与开发实践
Web前端开发学习资料:深度探索与开发实践
9 3