Django项目搭建

0. 项目准备:

python:(目前更新到3.9了),下载地址:
点此下载python
https://www.python.org/downloads/

python解释器:
点此下载pycharm 一般下载Community版。
https://www.jetbrains.com/pycharm/download/#section=windows
pycharm永久激活暂时不展示,随后更新激活方法。
安装mysql并设置环境变量
mysql官网下载mysql安装包并安装到本地,右击电脑属性 → 高级 → 环境变量 → 新建,如下图所示:

1. 创建一个文件夹,用于存放Django项目

进入pycharm后点击新建项目

加载完成后进入项目页

2. 创建Django项目

1. 创建项目

打开 pycharm 中的 terminal,确定当前目录是在项目存放的目录下,输入:

django-admin.py startproject coconut

coconut 为项目名,自己定义。

2. 项目目录介绍

  • init.py:项目初始化文件,会把这个项目目录变成一个Python的包(package)——相关Python模块的一个集合。
  • settings.py:项目设置文件,包含了项目的默认设置。包括数据库信息、调试标志以及其他一些重要的变量,项目里安装的任何应用都可以访问这个文件。
  • urls.py:项目总路由配置文件,在Django里叫URLconf,它是一个将URL模式映射到你应用程序上的配置文件。URLconf是Django里非常强大的一个特性。
  • wsgi.py:项目部署配置文件
  • manage.py:启动文件,是一个同这个Django项目一起工作的工具。可以从它在目录列表中的权限里看到它是可以执行的。

3. 启动项目

在terminal中cd到项目路径下,执行:

python manage.py runserver

默认端口 8000,可指定也可不指定,假设指定端口8888,则执行:
python manage.py runserver ip:port

python manage.py runserver 127.0.0.1:8888

会出现以下结果:

(venv) F:\python\pythonProject\coconut>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...System check identified no issues (0 silenced).You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.November 23, 2020- 17:13:01
Django version 2.2.6, using settings 'coconut.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

此时点击输出台上的:http://127.0.0.1:8000/
会自动跳转到浏览器显示Django项目启动成功的页面:
The install worked successfully! Congratulations!
表示Django项目启动成功!
退出项目快捷键:Ctrl+c

4. 创建blog应用

有了项目之后就可以在它下面创建应用了,Django的说法是“app”。
在项目路径下,执行:

python manage.py startapp users

users为应用名,自己定义。

应用目录介绍:

migrations:数据库迁移的记录文件
__init__.py:应用初始化文件
admin.py:使用Django自带后台模板时注册管理文件
apps:注明子应用名,创建子应用已自动标注,可忽略
models.py:创建模型类文件
tests.py:用于自测
views.py:编写视图函数文件

5. 注册应用

settings.py 中找到 INSTALLED_APPS,在后边添加创建的子应用名:

# my apps
'users',

后续在创建完model模型后,执行syncdb命令时,Django会查找INSTALLED_APPS里的每一个models.py文件,并为找到的每一个model都创建一张数据库表。
INSTALLED_APPS里的其他默认条目也都拥有model。manage.py syncdb的输出就确认了这一点,Django会为每一个app都创建了一个或多个表。

每次往项目里添加新应用时都运行一下数据迁移(sync同步)命令,确保它所需的表已经在数据库里创建了。

* Blog的公共部分

从Django的角度来说,一个页面具有三个典型的组件:

  • 一个模版(template),模版负责将传递进来的信息显示出来(用一种类似Python字典的对象Context)。
  • 一个视图(view)函数,它负责获取要显示的信息,通常都是从数据库取得。
  • 一个URL模式,它用来把收到的请求和你的视图函数匹配,有时也会向视图传递一些参数。

6. 配置模板文件

在应用目录下创建templates文件夹
注意:大型项目需要在项目根目录下统一创建末班文件夹,在settings 中找到 TEMPLATES :
'DIRS': [os.path.join(BASE_DIR, 'templates')],
我们此处只在创建的应用下创建模板文件夹,settings中的TEMPLATES无需设置路径。
前端HTML页面需要的js和css也在应用目录下创建static文件夹,然后把从网上下载的js和css文件保存到static文件夹中,以供前端HTML页面调用。

7. 配置数据库

1. 数据库设置:

Django默认使用的数据库是db.sqlite3,我们最常用的是mysql,找到 settings 中的 DATABASES,做以下配置:

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'coconut',  # 数据库名字'USER': 'root',   # 用户名'PASSWORD': '12345678',  # 数据库密码'HOST': 'localhost',  # 主机名'PORT': '3306'  # mysql端口}
}

2. 创建数据库

打开电脑终端,进入mysql:
mysql -u root -p

输入密码,然后创建数据库,编码格式指定为utf-8
CREATE DATABASE coconut default charset utf8 COLLATE utf8_general_ci;
此处的coconut名需要跟你在settings中的NAME相同。

8. 设置路由

1. 设置总路由

根目录下找到uls.py文件,导入include函数,并在urlpatterns的列表中配置应用url:

from django.urls import path, include
urlpatterns = [path('', include('users.urls')),# path('', include(('users.urls', 'users'), namespace='users')),
]

Django1版本是url开头,Django2版本后是path开头,配置晒稍有不同,下边注释掉的是给users应用指定了命名空间namespace,为了区分不同应用下相同路由匹配模板。

2. 设置子路由

在users应用下创建urls.py文件,并在此文件中设置users应用下的路由。当然也可以把所有路由匹配到根目录下的路由中,但是比较混乱,分开创建比较清晰。

from django.conf.urls import url
from users import views
# 此处可以 from . import views,但不建议
urlpatterns = [# 首页url(r'^$', views.index),  # $ 要加,否则出现路由屏蔽现象,后面的路由无法匹配
]

9. 编写视图函数

打开views.py文件,编写:

from django.shortcuts import render# Create your views here.def index(request):""" 首页 """return render(request, 'index.html')

有返回内容的视图函数:

from django.template import loader, Context
from django.http import HttpResponse
from users.models import Usersdef index(request):""" 首页 """posts = Users.objects.all()t = loader.get_template{"index.html"}c = Context({ 'posts' : posts})return HttpResponse(t.render(c))

10. 创建模板文件

在之前创建的templates文件夹下创建index.html文件,编写首页内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Coconut</title>
</head>
<body>
<h2>欢迎来到椰子首页!</h2>
</body>
</html>

11. 测试效果

打开terminal,在项目根目录下执行:

python manage.py runserver

然后点击连接,会跳转到浏览器出现:

这样,Django项目就算创建完成啦!

12. 创建模型,与mysql交互

打开users应用中的models.py文件创建模型类

from django.db import models# Create your models here.class Users(models.Model):""" 用户模型 """id = models.AutoField(primary_key=True, verbose_name='用户编号')  # 此行可不写,Django自动创建,并设置成该表的主键primary_keyusername = models.CharField(max_length=64, verbose_name='用户名')mobile = models.CharField(max_length=11, verbose_name='手机号')email = models.EmailField(max_length=128, verbose_name='邮箱')register_date = models.DateField(auto_now_add=True, verbose_name='注册日期')class Meta:db_table = 'users'verbose_name = '用户表'verbose_name_plural = verbose_nameordering = ['-register_date']def __str__(self):return self.username

这个新建的User类是django.db.models.Model的一个子类,这是Django为数据model准备的标准基类,它是Django强大的对象关系映射(ORM)系统的核心。此外,每一个变量都和普通的类属性一样被定义为一个特定变量类(field class)的实例。
创建好后在terminal中初始化本地数据库:

(venv) F:\python\test_project\Coconut>python manage.py makemigrations users

会返回创建表users:

Migrations for 'users':users\migrations\0001_initial.py- Create model Users

然后进行数据库迁移:

(venv) F:\python\test_project\Coconut>python manage.py makemigrate

等待迁移完成

Operations to perform:Apply all migrations: admin, auth, contenttypes, sessions, users
Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying sessions.0001_initial... OKApplying users.0001_initial... OK

然后migrations文件夹中会多出0001_initial.py文件,这是记录创建表和迁移。
此时就可以在前端页面开展类似用户注册、登录等相关功能,后期自己根据需求,慢慢扩充项目就可以啦。

13. 总结

Django优雅、简洁的特性:

  • 内置的Web服务器能让开发工作自给自足,同时它能在代码被修改时自动重新加载你的代码;
  • 数据模型的创建采用纯Python方式完成,自己不用编写维护任何SQL代码或XML描述文件;
  • 自动化的admin应用程序,提供了完整的内容编辑特性,甚至非技术背景的用户也能使用;
  • 模版系统,可以用来生成html、CSS、javascript以及任何文本输出格式;
  • 模版过滤器,可以在不解除应用程序商业逻辑的前提下修改表示层的数据显示(比如日期);
  • URLconf系统,在给予我们URL设计极大灵活性的同时还能将应用程序特定的URL部分保留在其所属的应用程序内部。

如有不足,欢迎指正!

Python Web框架 Django项目搭建与测试详解相关推荐

  1. python搭建django框架,Python之Web框架Django项目搭建全过程

    Python之Web框架Django项目搭建全过程 IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 注:可通过pip fre ...

  2. Python Web框架Django学习(二)

    python web框架Django学习(二) 目录:  三.Django创建APP  四.创建登录页面,实现用户交互,后台管理用户(非数据库方式) ========================= ...

  3. 自动化测试框架[Cypress命令行执行测试详解]

    前提 已经熟练掌握了Cypress的基本知识,请参考自动化测试框架[Cypress概述]和自动化测试框架[各自动化测试框架比较] 已经熟练掌握Cypress环境配置,请参考自动化测试框架[Cypres ...

  4. Python web框架Django学习(1)

    2019独角兽企业重金招聘Python工程师标准>>> 1.Django简介 (1)Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的 ...

  5. Python pytest框架之@pytest.fixture()和conftest详解

    一.fixture简介 学pytest就不得不说fixture,fixture是pytest的精髓所在,类似unittest中setup/teardown这种前后置东西.但是比它们要强大.灵活很多,它 ...

  6. 基于Python web框架Django+Bootstrap的房源推荐系统

    哈喽,大家好呀,本次给大家推荐一个房源推荐系统,以成都市的某几个区的数据为例,仿链接平台,主要业务逻辑是: 1)将链家的数据爬取下来存储为Json文件 2)Json文件向前端JavaScript传递参 ...

  7. Python Web 框架-Django day05

    目录 1.F查询和Q查询 2.原生的数据库操作方法 3.使用后台管理 models day04 1.增加数据 Entry.objects.create(属性=值) 返回值:创建好的实体对象 创建实体对 ...

  8. java fragment_Java Web Fragment在项目中使用方法详解

    Web Fragment 是什么 - 它是在 servlet 3.0开始支持的,可以把一个dy web项目拆分为多个项目,解耦合,使其在项目中开发效率提高,下面我演示简单的项目创建过程 用eclips ...

  9. Web框架——Flask系列之自定义过滤器详解(五)

    一.为什么要自定义过滤器 过滤器的本质是函数.当模板内置的过滤器不能满足需求,可以自定义过滤器. 二.自定义过滤器两种方式 方式一 先定义函数 后添加到过滤器列表,app.add_template_f ...

最新文章

  1. Linux 登陆火星,占有率再超 Windows,NASA 还在 GitHub 发布源码教程
  2. 石墨烯区块链(6)开发实例
  3. 开放重定向(Open Redirection)
  4. java checkbox数组_Java中的复选框数组
  5. puppeteer 自动化测试 一
  6. FOR ALL ENTRIES的原理:
  7. 我的FPA性格色彩测试结果
  8. vlan和静态路由配置实验
  9. JRE、JDK下载安装教程
  10. elasticsearch安装教程
  11. GitLab强制关闭双因素认证
  12. apache 开启 网页压缩
  13. MeanShift算法原理及其python自定义实现
  14. Connection(数据库连接对象)
  15. 【EXCEL绘制地图】获取地图图标信息时遇到问题。请确保处于联机状态,然后重试
  16. 本野桂 出任索尼中国专业系统集团总裁
  17. 目前缺少用于语义分割的 3D LiDAR 数据吗?关于三维点云数据集和方法的调查
  18. 【组队学习】【33期】组队学习内容详情
  19. Mybatis 源码分析(一)
  20. 学会Zynq(28)SPI控制器简介

热门文章

  1. win10浏览器闪退_win10 edge浏览器闪退打不开的恢复方法
  2. 分享一些 Vue 的视频教程和电子书资源
  3. Oracle 基于用户管理恢复的处理
  4. 编程_三大编程思想:POP、OOP、AOP
  5. 大类资产配置的基本方法
  6. 使用ProcMon 输出调试信息
  7. (一)幻彩灯珠-SK6812
  8. 最新版本maven引发的血案
  9. 搞定 conda 安装包报错问题
  10. mybatis mysql 调用存储过程 多个返回值_被Mybatis坑惨了