Django基础(一)

新建web项目,让网站跑起来,实现浏览器访问显示Hello World。

Posted by K4ys0n on December 17, 2019

前言

本项目准备采用Django + bootstrap开发一个稍微复杂一丢丢的博客网站,除了日常发布写博客和发布博客的功能之外,还应包含功能:登录注册,用户关注,点赞,内容推荐和权限管理

步骤

1. 需求分析

按照前言所说,本项目至少要完成以下需求:

  • 项目名称myblog。
  • 主页中显示每篇文章的标题、摘要和发帖日期。
  • 主页中加入侧边栏,可以加入自定义的HTML以及JS代码,就是一些菜单栏之类的。
  • 可以正确显示markdown文件。
  • 主页提供用户登录注册。
  • 博客可以被用户点赞、关注。
  • 拓展功能:权限管理和内容推荐。

2. 版本信息

首先需要安装python,django库,virtualenv虚拟环境等。

安装过程我就不赘述了,本项目相关库版本如下:

  • 操作系统:windows 7
  • Pycharm:2019.2
  • Python:3.7.4
  • Django:2.2.7
  • bootstrap
  • virtualenv

3.开始项目

先在pycharm中找到你的工作目录,打开terminal,开启安装好的虚拟环境:

source VENV/bin/activate

然后输入以下命令创建项目:

django-admin startproject myblog    # 创建项目
cd myblog
python manage.py startapp blog      # 创建APP
cd ..
tree myblog /f    # 显示目录树,Linux下不用/f

可以看到整个项目的目录树如下:

E:\WORKSPACE\GITHUB\PROJECT\MYBLOG
│  manage.py                # 命令行工具,用于与Django项目的交互
│
├─blog                      # APP
│  │  admin.py
│  │  apps.py
│  │  models.py             # 模型,用于与数据库交互
│  │  tests.py              # 用于编写测试用例
│  │  views.py              # 视图函数,用于设计后台逻辑
│  │  __init__.py
│  │
│  └─migrations             # 保存由Django生成的影响数据库的命令
│          __init__.py
│
└─myblog
    │  settings.py          # 项目配置
    │  urls.py              # 项目的URL声明
    │  wsgi.py              # 项目与wsgi兼容的web服务器入口
    │  __init__.py
    │
    └─__pycache__
            settings.cpython-37.pyc
            __init__.cpython-37.pyc

其实这个时候是可以直接运行的了,命令行输入以下命令:

cd myblog
python manage.py runserver

接着打开浏览器,输入127.0.0.1:8000,就可以看到Django默认页面了。

4. 创建超级用户

先ctrl+c退出命令行运行的服务,先生成有关用户信息的数据库。

python manage.py migrate

成功的话会输出如下:

(venv) E:\workspace\github\project\myblog>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

接着输入以下命令创建超级用户,这样就可以登录Django自带的后台管理系统了。

python manage.py createsuperuser

接着会提示输入用户名,邮箱,密码等,邮箱可以直接回车不用输入,密码如果小于8个字符的话会提示确认,输入y确认即可。

(venv) E:\workspace\github\project\myblog>python manage.py createsuperuser
Username (leave blank to use 'user'): root
Email address:
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

5.添加app、修改时区和中文编码

打开settings.py文件,在INSTALLED_APP中添加app,见最后一行:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',     # 添加这一行
]

然后找到以下两行,并做修改:

# LANGUAGE_CODE = 'en-us'
# TIME_ZONE = 'UTC'
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

# 并且将这一行注释,如果后续用MySQL数据库并且部署到Linux服务器上时,可能会导致前端显示数据不正常。
# USE_TZ = True

6.后台管理系统admin

输入以下命令运行网站:

python manage.py runserver

在浏览器输入 127.0.0.1:8000/admin 可以进入Django自带的后台管理系统,输入前面设置的账号密码,可以登录admin看到后台管理系统。

7.显示Hello World

7.1 myblog/urls.py

首先在myblog/urls.py中编写如下内容:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]
7.2 blog/urls.py

接着在blog目录下创建urls.py文件,并编写如下内容:

from django.urls import path
from . import views

app_name = 'blog'

urlpatterns = [
    path('', views.index),
]
7.3 blog/views.py
from django.shortcuts import HttpResponse

def index(request):
    return HttpResponse("Hello World!")
7.4 启动网站

命令行输入:

python manage.py runserver

浏览器访问127.0.0.1:8000就可以看到Hello World啦!

8.项目保存到GitHub

在GitHub上创建仓库myblog,复制仓库https链接,然后在命令行中输入:

git init    # 确保是在工程目录myblog下
git remote add origin https://github.com/K4ys0n/myblog.git   # 这个链接就是上面复制的https连接

接下来保存本地仓库,并且推送到远程仓库

git add .
git commit -m "first commit, create a project"
git push -u origin master

可以登录到GitHub查看是否推送成功,此后用git push推送时就只要git push而不用加上-u origin master了。

后记

工程初步完成,接下来开始完善各个部分,过程中可能会遇到各种问题,也会遇到很多参数也好,函数也好,不一定在本项目遇到,但是可以做笔记记录。

下一章建立models模型,同时也做一下models模型的学习。