django2.0+python3.4实战开发教程-信息型博客系统(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xjm850552586/article/details/82845285

项目简介

运行平台:windows
Python版本:3.4
Django版本:2.0
数据库工具:sqlite
开发工具:Pycharm+sublime-text

写在开头:这是我第一次使用Django进行web开发,在此之前并无任何web开发经验。其中,Django以及html/css都属于边学边用阶段,因此项目中可能出现一些粗糙的地方,读者可以自行规避。虽然本项目名为信息资源型系统,但是其实也就是开发了一个博客,希望能带给你们一些帮助~

本项目中的一切网页都是静态网页,另外还有诸多不足的地方,不过作为一个入手项目,暂不会继续修改更新,有兴趣者可以自行完善。

目前本项目发布在阿里云平台,地址:http://47.106.39.91/
项目下载地址:

建议

  • 配合Django官方文档教程以及其他博主学习博客进行学习
  • 跟着教程自己完成一次Django开发
  • 具有一定python语言基础
  • 下载SQLITEStudio

实战开始
我们首先给我们的项目起个名字:EasyDown。
(1)利用命令行创建项目

django-admin startproject EasyDown

(2)创建APP
由于我们准备搭建的是一个博客系统,所以就给这个APP起名为:blog
在命令行下继续输入

python manage.py startapp blog

此时本项目的文件树列表如下所示:
在这里插入图片描述

在blog子目录下新建一个py文档:urls.py
在这里插入图片描述
(3)注册app并配置静态文件目录
打开setting.py文件,添加如下信息
在这里插入图片描述

# 配置静态文件目录
STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),
    ]

(4)创建目录
在blog目录下创建两个子目录

  • templates
  • static
    其中templates用于存放模板(即html文件)
    static文件夹下存放静态文件
    在这里插入图片描述
    接着我们在static文件夹下继续添加几个文件夹
    在这里插入图片描述
    然后我们在css文件夹下添加一个文件夹:images
    在这里插入图片描述
    (5)创建模型
  • 每一个Django 模型都继承自django.db.models.Model
  • 在模型当中每一个属性都对应一个数据库表的字段
    (本项目使用默认数据库SQLITE,不需要配置数据库)

由于本项目希望用户注册登陆后查看博客内容,因此我们需要一个登陆系统,那么我们便从这里开始入手。

扫描二维码关注公众号,回复: 4083643 查看本文章

用户具有如下信息:

  • 用户名(用于登陆)
  • 密码
  • 昵称
  • 邮箱
  • 创建时间
  • 评论数
  • 头像

打开blog目录下的models.py文件,添加如下内容

from django.db import models
from django.utils.timezone import now

class User(models.Model):
    username = models.CharField(max_length = 50)
    password = models.CharField(max_length = 200)
    nickname = models.CharField(max_length = 50,default='匿名')
    email = models.EmailField()
    created_time = models.CharField(max_length=50,default=now)
    comment_num = models.PositiveIntegerField(verbose_name='评论数', default=0)
    avatar = models.ImageField(upload_to = 'media', default="media/default.png")

    def __str__(self):
        return self.username

(ps:当初在开发该项目时头像这条信息是后续加入的)
由于我们头像默认地址为media/default.png,所以需要放一张default.png图片在该文件夹下。

(6)注册模型并同步数据库
接下来打开blog下的admin.py文件

from django.contrib import admin
from .models import User

admin.site.register(User)

接着打开命令行进入manage.py同级目录
依次输入以下指令

python manage.py makemigrations
python manage.py migrate

创建成功后,会生成一个SQL文件
在这里插入图片描述
用SQLITEStudio打开这个文件,进入blog_user表
在这里插入图片描述
这里可以看到我们已经成功同步数据库

(7)注册界面的开发
(本博不讲解html元素布局以及css等内容)
首先我们在templates文件夹下新建一个文件:register.html
接着我们在static/css文件夹下新建一个文件:log.css。
然后我们在static/css文件夹下添加一个文件:semantic.css(这是个前端框架,去官网下载后复制过来)
其中log.css文件内容如下(某些内容用不到):

.back{background:#181015 url("images/back.jpg") no-repeat; background-size: cover;}
.login{background:#181015 url("images/log_in.jpg") no-repeat; background-size: cover;}
.register{background:#181015 url("images/regis.jpg") no-repeat; background-size: cover;}
.forget{background:#181015 url("images/for_get.jpg") no-repeat; background-size: cover;}
.bg{padding-top:100px;background:#181015 url("images/background.jpg") no-repeat; background-size: cover;}
.reset{background:#181015 url("images/reset.jpg") no-repeat; background-size: cover;}
.comment{background:#181015 url("images/comm.png") no-repeat; background-size: cover;}
.contact{background:#181015 url("images/contact.png") no-repeat; background-size: cover;}



.footer2 { background: #191919; padding: 15px 0; color: #777; font-size: 12px; }
	.footer2 a { color: #aaa; }
		.footer2 a:hover { color: #fff; }
		.footer2 p { margin: 0; }

	.widget-simplenav { margin-left:-5px; }
	.widget-simplenav a{ margin:0 5px; }

我们需要在css/images文件夹下放一张图片命名为:regis.jpg
这便是我们注册页面的背景图

register.html文件内容如下:

{%load static%}
<!DOCTYPE html>
<html lang="zh-hans">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
    <link rel="stylesheet" href="{%static 'css/log.css' %}">
    <link rel="stylesheet" href="{%static 'css/semantic.css' %}">
</head>
<body class="register">
    <div class="ui center aligned grid" style="margin-top: 200px">
        <div class="ui six wide column">
            <h1 class="ui teal header"><font color="black">EasyDown-用户注册</font></h1>
            <div class="ui segment">
                <div class="ui content">
                    <form class="ui form" method="post" action="http://127.0.0.1:8000/register/"  enctype="multipart/form-data">
                        <div class="field">
                            <input type="text" name="username" placeholder="请输入用户名"><br>
                        </div>
                        <div class="field">
                            <input type="password" name="password_1" placeholder="请输入密码"><br>
                        </div>
                        <div class="field">
                            <input type="password" name="password_2" placeholder="请确认密码"><br>
                        </div>
                        <div class="field">
                            <input type="text" name="nickname" placeholder="请输入昵称"><br>
                        </div>
                        <div class="field">
                            <input type="text" name="email" placeholder="请输入邮箱"><br>
                        </div>
                        <div>头像<input type="file" name="avatar"></div>
                        {{ error }}<br>
                        <button class="ui fluid large teal button" type="submit">注册</button>
                    </form>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

第一句话{%load static%}代表引入静态文件(css,js等)
img,css,js等文件的引用与下述语句类似:

 <link rel="stylesheet" href="{%static 'css/log.css' %}">

打开blog下的views.py文件,添加以下内容

from django.shortcuts import render
def register(requests):
    return render(requests,'register.html')

接着我们打开EasyDown目录下的urls.py文件,为我们的注册页面添加路由信息

from django.contrib import admin
from django.urls import path
from blog import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/',views.register,name = 'register'),
]

命令行进入manage.py同级目录输入指令

python manage.py runserver

由于我们注册页面的相对路径为register/,所以我们在浏览器中进入http://127.0.0.1:8000/register/
可以看到注册界面

当然此时的注册信息是写入不到数据库的,毕竟我们的后台目前只有一句话,也就是展示该页面。

猜你喜欢

转载自blog.csdn.net/xjm850552586/article/details/82845285