这一篇将介绍创建项目的一些准备工作,包括创建 git 服务器,创建 Django 项目并修改配置连接到 mysql 数据库,添加本地配置文件,添加 URL 和模板。

创建 git 服务器

因为是三个人合作,所以我在服务器(CentOS7)上新建了一个 git 仓库。

参考:搭建Git服务器

在服务器上执行:

yum install git # 如果没有安装过 git,则需要安装一下
sudo adduser git # 添加一个系统用户:git 
vim /home/git/.ssh/authorized_keys # 编辑系统用户 git 的“已授权的公钥列表”文件

每个成员在终端执行

ssh-keygen -t rsa -C "你的邮箱" # 也可以ssh-keygen回车然后按提示操作

收集每个成员的公钥 ~/.ssh/id_rsa.pub,放到 authorized_keys中,一行一个。

在服务器上进入适当目录

cd /home/
sudo git init --bare sample.git # 新建一个 sample.git 的仓库
sudo chown -R git:git sample.git # 修改拥有者

每个成员克隆服务器上的仓库到本地

git clone git@服务器地址:/home/sample.git
# 最终输出如下
# Cloning into 'sample'...
# warning: You appear to have cloned an empty repository.

安装 Django 和创建项目

环境:macOSX、python3.6

pip install django
django-admin startproject sample # 创建项目
cd sample
python manage.py startapp auth # 创建 app

# 如果没有安装过gi,可以装一个:https://www.gitignore.io/docs
gi python >> .gitignore # 创建git ignore文件

用 pycharm 打开项目之后设置项目的 interpreter,可以创建一个 venv。

连接 MySQL 数据库

我们在 MySQL 中创建一个数据库:

mysql -uroot -p
mysql> create database tdlte; # 创建名字为tdlte的数据库

编辑/sample/sample/settings.py中的数据库设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 使用 mysql
        'NAME': 'tdlte', # 数据库名
        'USER': 'root', # 数据库用户名
        'PASSWORD': '', # 数据库密码
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

添加 local_settings.py

因为多个人开发,本地配置往往各不相同,一般可创建一个叫local_settings.py的文件用来添加配置。 然后需要在settings.py最后加上:

try:
    from .local_settings import *
except ImportError:
    pass

配置文件里的 INSTALLED_APPS 有一些自带的组件,比如用户管理。其中一些需要创建数据表,所以我们需要执行迁移命令,它会自动在数据库中创建相应的表:

python manage.py migrate

设置 URL

编辑sample/sample/urls.py

from django.contrib import admin
from django.urls import include, path
from django.views.generic import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls), # 内置的后台
    path('auth/', include('auth.urls')), #  将 auth 里的 urls添加进来
    path('', TemplateView.as_view(template_name='index.html'), name='index') # 使用内置的视图渲染主页
]

添加模板

以下是一个基于 Semantic UI 的示例。 创建sample/templates目录,创建layout.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
    <title>{% block title %}{% endblock %} | Sample 系统</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.3.3/dist/semantic.min.css">
    <script src="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.3.3/dist/semantic.min.js"></script>
    </head>
<body>
<div class="ui container">
{% block content %}
{% endblock %}
</div>
</body>
</html>

创建'index.html':

{% extends "layout.html" %}

{% block title %}首页{% endblock %}

{% block content %}
<div class="ui stacked segment">
  <div class="header">
    Welcome to our site!
  </div>
  <p>Fill out the form below to sign-up for a new account</p>
</div>
<form class="ui form attached fluid segment">
  <div class="two fields">
    <div class="field">
      <label>First Name</label>
      <input placeholder="First Name" type="text">
    </div>
    <div class="field">
      <label>Last Name</label>
      <input placeholder="Last Name" type="text">
    </div>
  </div>
  <div class="field">
    <label>Username</label>
    <input placeholder="Username" type="text">
  </div>
  <div class="field">
    <label>Password</label>
    <input type="password">
  </div>
  <div class="inline field">
    <div class="ui checkbox">
      <input type="checkbox" id="terms">
      <label for="terms">I agree to the terms and conditions</label>
    </div>
  </div>
  <div class="ui blue submit button">Submit</div>
</form>
{% endblock %}

sample/settings.py中修改TEMPLATESDIRS属性。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',

                'tdlte.frontend.common',
            ],
        },
    },
]

运行项目

现在执行

python manage.py runserver

即可看到一个简单的页面。


Blog Comments powered by Disqus.