第三篇 初步建立blog应用

124 阅读3分钟

「可以的话,想看看更好的自己」

新的虚拟环境和配置

普通用户家目录下:

  1. python3 -m venv venv_mysite # 创建新的虚拟环境
  2. source venv_mysite/bin/activate # 激活虚拟环境
  3. pip install -i https://pypi.doubanio.com/simple/ Django==3.2 # 安装Django模块
  4. pip install -i https://pypi.doubanio.com/simple/ uwsgi # 安装uwsgi模块
  5. django-admin manage.py startproject mysite # 创建mysite新项目
  6. cd mysite # 切到项目路径下
  7. cp ~/First_Django/my_uwsgi.ini ./my_uwsgi.ini # 复制原项目的uwsgi配置文件
  8. 编辑uwsgi配置文件,改成新路径
  9. 注意要给settings.py中的加入ip地址
  10. 最后uwsgi --ini my_uwsgi.ini启动,新项目基本操作完成。

在项目根目录下,执行python3 manage.py migrate,目的是在数据库里创建settings.py文件中的INSTALLED_APPS中的应用所需的数据表:

这里的数据库是sqlite3,是Django自带的轻量级数据库,如果需要更改为mysql,可以参考我以前的文章:Django:mysql数据库链接操作,当然别的数据库也是可以的。

突发奇想:

如果我新建一个ssh窗口,把旧项目的uwsgi也开启,会是什么样子?

一顿操作完,ini之后查看web界面并没有什么变化,查看mysite的uwsgi日志发现刷新会有记录,但是First_Django项目的日志体现出了问题:

your processes number limit is 15258
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
probably another instance of uWSGI is running on the same address (0.0.0.0:8888).
bind(): Address already in use [core/socket.c line 769]

翻译:可能另一个uWSGI实例正在同一地址上运行(0.0.0.0:8888)。看来要都跑起来,除了修改uwsgi的配置,Nginx也需要(又是知识匮乏的时刻)

Nginx部署多站

只需在nginx.conf配置加入新的server

server {
        listen       8000;
        listen       **********;
    #    server_name  somename  alias  another.alias;

        location / {
            root   html;
            index  index.html index.htm;
            uwsgi_pass 0.0.0.0:9999;
            include uwsgi_params;
        }
    }

第一个server下就有,不过注释掉了,修改一下就好,注意uwsgi_pass 参数的转发端口要不同。这里我设置8000端口作为新server的监听端口。
修改配置后,使用nginx -t检查一下格式,没问题后重启Nginx,再把uwsgi配置也修改一下端口为9999,然后重启uwsgi。

这样,可以同时在8000端口运行新的Django项目啦!

Django 2 By Example

后续的学习都是跟着这个网址:Django 2 By Example(全文翻译)去学习的,博主很奈斯!

blogApp

通过python3 manage.py startapp blog生成一个blog文件夹,这是第一个应用。
先跟着博主定义一个Post类,在blog应用下的models.py文件中添加下列代码:

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


class Post(models.Model):
    STATUS_CHOICES = (('draft', 'Draft'), ('published', 'Published'))
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date='publish')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')


    class Meta:
        ordering = ('-publish',)


    def __str__(self):
        return self.title

为方便开发,小编建立gitee仓库,顺便记录改动,多多使用Git命令。

不同类型字段学习:Django-fields

接着激活应用,使之创建数据表并追踪数据模型变化,需要在settings.py文件中的INSTALLED_APPS添加blog.apps.BlogConfig

注意: 如果编辑了models.py文件,对已经存在的数据模型进行了增删改,或者又添加了新的数据模型,必须重新执行makemigrations创建新的数据迁移文件然后执行migrate命令同步数据库。

故此时我们在项目根目录执行python3 manage.py makemigrations blog + python3 manage.py migrate

创建后台站点

Django内置了一个管理后台,这个管理后台动态的读入数据模型,然后创建一个完备的管理界面,从而可以方便的管理数据。

管理后台功能其实也是一个应用叫做django.contrib.admin,默认包含在INSTALLED_APPS设置中。 执行python3 manage.py createsuperuser 输入用户名 邮箱 密码 确认密码 就创建好了超级用户。在url后面接/admin即可进入:

注意: 在settings文件中将LANGUAGE_CODE修改为 'zh-hans' ,重启后即可中文显示。

将Post模型添加到管理后台中,编辑blog应用的admin.py文件:

from django.contrib import admin
from .models import Post

admin.site.register(Post)

之后刷新页面,看到Post类出现在管理后台中:


日常犯困~