Django新建项目(Linux操作系统)

  • Post author:
  • Post category:linux




一、简介

Django是一个开放源代码的Web应用框架,由Python写成,只需要程序员完成很少量的代码,就能够很好的完成网站开发,已经成为web开发者的首选框架。Django采用了MTV的框架模式,即模型Model,视图Views和模版Template。Django也是一个遵循 MVC 设计模式的框架,即模型Model、视图View、控制器Controller。

在这里插入图片描述



二、安装django并创建一个新项目

  1. 安装django
yang@TUF:~$ pip install django
  1. 创建新项目
# 创建一个名为zhixi的新项目(会在当前文件夹中创建一个名为 zhixi 的新文件夹)
yang@TUF:~$ django-admin startproject zhixi

# 进入项目文件夹
yang@TUF:~$ cd zhixi
 
# 查看项目的文件目录
yang@TUF:~/zhixi$ tree 
.
├── manage.py
└── zhixi
    ├── asgi.py
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

# 运行项目,通过端口访问
yang@TUF:~/zhixi$ python3 manage.py runserver
# 自定义端口:
yang@TUF:~/zhixi$ python manage.py runserver 0.0.0.0:8000

然后通过本地默认端口127.0.0.1:8000在浏览器中访问项目,也可以根据需要自定义端口地址。

img

  1. 安装及初始化过程如有疑问,可以参考:

    Django官方文档



三、完善项目文件结构

在初始化的新项目有些文件和设置不太完善,我希望按照自己的习惯和常用的模块去调整一些基本设置。方便起见,这里不进行前后端分离开发的设置,若要实现前后端分离,只需要将templates文件夹步骤去掉,将整个django仅仅视为一个后端响应+数据库接口就可以了。



1. views.py

首先需要创建

views.py

文件:

yang@TUF:~/zhixi$ vi zhixi/views.py

并在

views.py

中写入:

from django.http import HttpResponse
from django.shortcuts import render
 
# 仅作为后端响应请求
def hello(request):
    return HttpResponse("Hello world ! ")
 
# 响应请求后发回html页面及向其传递的参数
def hello(request):
    context          = {}
    context['hello'] = 'Hello World!'
    return render(request, 'hello.html', context)



views.py


视图文件,是django编写后端响应算法的主要逻辑文件,其内定义了若干函数,每个函数获取到特定请求后,经过一系列的逻辑操作,如访问数据库等,将结果返回给请求的发起者,如果定义了模板,也可以将结果作为参数发送给模板中的html文件,然后将html文件返回给请求的发起者。



2. urls.py

打开

urls.py

文件并定义路由:

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



urls.py


路由文件,是django收到请求后分配的路由文件,负责将受到的请求分配给

views.py

中对应的响应函数,通过定义url和视图函数之间的对应关系来实现。



3. Templates模板

创建templates文件夹:

# 创建模板文件夹
yang@TUF:~/zhixi$ mkdir templates

# 创建模板html文件
yang@TUF:~/zhixi$ vi templates/hello.html



hello.html

中写入:

<h1>{{ hello }}</h1>

修改

settings.py

中的模板路径

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, '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',
            ],
        },
    },
]



templates


模板文件夹,主要保存html等前端文件,html文件接收来自视图函数的参数,供视图函数调用返回,作为网页页面展示给用户,可以视为django的前端。



4. Model模型

如果没有安装数据库,需要先安装,这里安装mysql(有很多方式,这只是其中一种):

# 安装rpm,是一个强大的命令行驱动的软件包管理工具,用来安装、卸载、校验、查询和更新 Linux 系统上的软件包。
yang@TUF:~/zhixi$ sudo apt install rpm

# 查看系统上是否已经安装数据库
yang@TUF:~/zhixi$ rpm -qa | grep mysql

# 若有数据库,可以选择卸载数据库
yang@TUF:~/zhixi$ rpm -e mysql    // 普通删除模式
yang@TUF:~/zhixi$ rpm -e --nodeps mysql    // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除

# 下载mysql资源包,网址为:https://dev.mysql.com/downloads/repo/yum/
yang@TUF:~/zhixi$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

# 安装mysql资源包
yang@TUF:~/zhixi$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

# 安装mysql-sever
yang@TUF:~/zhixi$ sudo apt install mysql-server

# 权限设置
yang@TUF:~/zhixi$ sudo chown -R mysql:mysql /var/lib/mysql/

# 初始化mysql
yang@TUF:~/zhixi$ sudo mysql --initialize
# 启动mysql服务
yang@TUF:~/zhixi$ sudo systemctl start mysql
# 查看mysql服务状态
yang@TUF:~/zhixi$ sudo systemctl status mysql
# 停止mysql服务
yang@TUF:~/zhixi$ sudo systemctl stop mysql

# 此时可以在命令行打开mysql,则安装成功
yang@TUF:~/zhixi$ sudo mysql -u root

# 安装mysql在python的驱动
yang@TUF:~/zhixi$ sudo pip install pymysql

安装好mysql后需要对用户、用户组、端口、密码等进行设置:

# 从命令行连接mysql
yang@TUF:~/zhixi$ sudo mysql -u root
# 查看mysql的端口
mysql> show global variables like 'port';
# 创建数据库名为my_database
mysql> create database my_database;
# 更改root用户的密码
mysql> alter mysql.user 'root'@'localhost' identified with mysql_native_password by '123456';

# 但我是了好几次都会报语法错误,最后通过下面的方式解决的
# 将用户表中root用户的登陆方式改为mysql_native_password密码登录
mysql> update mysql.user set plugin='mysql_native_password' where user='root';
# 刷新授权
mysql> flush privileges;
# 修改root用户的密码为123456
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
# 再次刷新授权
mysql> flush privileges;
# 退出mysql
mysql> exit

django规定,如果要使用模型,必须要创建一个app。所以我们需要在项目中创建一个app:

# 会在当前文件夹下创建一个名为 model 的新文件夹
yang@TUF:~/zhixi$ django-admin startapp model

# 编写models.py来创建数据库的表
yang@TUF:~/zhixi$ vi model/models.py

写入:

from django.db import models
 
class my_model(models.Model):
    name = models.CharField(max_length=20)

修改

settings.py

中的数据库和app的设置

import os

DATABASES = { 
    'default': 
    { 
        'ENGINE': 'django.db.backends.mysql',    # 数据库引擎
        'NAME': 'my_database', # 数据库名称
        'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1 
        'PORT': 3306, # 端口 
        'USER': 'root',  # 数据库用户名
        'PASSWORD': '123456', # 数据库密码
    }  
}

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'model',               # 添加此项
)

django2.2版本后,数据库使用的MySQLdb改为了mysqlclients,首先尝试 pip install mysqlclients,如果失败,可以在settings.py同级目录下的*

init

.py*文件中加入:

import pymysql

pymysql.install_as_MySQLdb()



views.py

文件中导入

models.py

中定义的模型:

yang@TUF:~/zhixi$ vi zhixi/views.py
# 加入:
from model.models import *

如果改变了

models.py

中表的结构,则需要在运行django项目之前,做一次更新迁移。

# 让 Django 知道我们在我们的模型有一些变更
yang@TUF:~/zhixi$ python3 manage.py makemigrations model 
# 创建表结构 
yang@TUF:~/zhixi$ python3 manage.py migrate model   



model


文件夹,以一个独立的app的形式存在,作为django与数据库通讯的接口,可以在

view.py

视图中被引用和调用,通过ORM语句或原生SQL语句对数据库进行增删改查等操作。

Django使用


对象关系映射(Object Relational Mapping, ORM )


。使用ORM语句更易于编程,但执行效率相对于原生SQL更低。ORM 在业务逻辑层和数据库层之间充当了桥梁的作用:

在这里插入图片描述

ORM 对应关系表:

在这里插入图片描述

OK到这里,完整的django框架就修改完了,可以开发自己的网站了,完整的文件结构:

在这里插入图片描述

整个框架各部分的功能关系如下图:

在这里插入图片描述

参考资料:

Django菜鸟教程



版权声明:本文为jkjgj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。