100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Python Web框架 Django项目搭建与测试详解

Python Web框架 Django项目搭建与测试详解

时间:2019-11-11 09:10:02

相关推荐

Python Web框架 Django项目搭建与测试详解

Django项目搭建

0. 项目准备:

python:(目前更新到3.9了),下载地址:

点此下载python

/downloads/

python解释器:

点此下载pycharm 一般下载Community版。

/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 runserverWatching for file changes with StatReloaderPerforming 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, - 17:13:01Django 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, includeurlpatterns = [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 urlfrom 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, Contextfrom django.http import HttpResponsefrom 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, usersRunning 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部分保留在其所属的应用程序内部。

如有不足,欢迎指正!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。