Django环境的安装以及项目创建
发布日期:2021-09-14 03:23:59 浏览次数:2 分类:技术文章

本文共 9338 字,大约阅读时间需要 31 分钟。

Django环境的安装以及项目创建

我们在哪里进行Django环境的安装?

在这里我们推荐使用linux系统来安装Django环境的安装与配置,本文使用Ubuntu作为系统来演示,之所以选择linux系统是因为在linux中比Windows中环境配置要简单的多,而且出的问题比较少,开发起来也比较方便快捷。接下来让你的Ubuntu连接到网络,开始我们的工作。

虚拟环境的安装

为什么要使用虚拟环境

我们知道,当使用sudo pip3 install 包名 去安装一个包的时候,后面安装的包会把前面安装的包给覆盖掉,但是使用Django开发的时候,可能会设计到一个包的不同版本,为了避免后面安装的包覆盖前面安装的包,我们需要使用虚拟环境来解决这个问题。这样就可以让不同项目依赖于不同版本的开发环境,从而可以正常执行。虚拟环境其实就是真实python环境的复制版本,它可以让同一台电脑使用不同版本的开发环境。

安装虚拟环境

Ubuntu终端执行一下命令(确保已经联网):

1.sudo pip install virtualenv #安装虚拟环境
如果没有pip命令可以先执行安装pip:sudo apt-get install python-pip
等待安装结束即可
2.sudo pip install virtualenvwrapper #安装虚拟环境扩展包
3.编辑家目录下的.bashrc文件
进入到你Ubuntu系统的家目录,找到.bashrc 文件,在文档最后加上一下两句代码:

export WORKON_HOME=$HOME/.virtualenvssource /usr/local/bin/virtualenvwrapper.sh

如果不能保存说明该文件权限不够,可以给文件加上相关权限即可。

4.使用source.bashrc使刚才的操作生效
通过以上操作,就已经将虚拟环境安装成功了。

创建虚拟环境

1.创建虚拟环境命令:mkvirtualenv 虚拟环境名

如果指定python的版本,可以使用图中的命令:
这个过程会有点长,请耐心等待。
2.虚拟环境安装在哪里了?
我们忙活了半天,那么虚拟环境安装在哪里了呢,毕竟我们也没有指定安装位置,下面就让我们来看看。
回到你的家目录,使用列出家目录下的所有文件以及文件夹,使用ll,不要只用ls,因为会有一些隐藏文件看不到。
可以发现使用ll之后,列表里面有一个 .virtualenv/文件夹,我们进入这个文件夹,然后再看一下里面有什么:
那么这样我们就定位到了我们刚才创建的虚拟环境路径。
3.虚拟环境相关命令
1.进入虚拟环境工作

workon 虚拟环境名

2.查看机器上有多少虚拟环境

work 空格+两个tab键

3.退出虚拟环境

dactivate

4.虚拟环境安装包注意事项
在虚拟环境中使用以下语句安装包:

pip install python 包名

而不能使用:

sudo pip install 包名

因为加上sudo会把包安装到真实的主机环境中去,而不是安装到虚拟环境中。

项目创建

Django环境安装

1.首先确认自己以进入虚拟环境中

2.安装命令:pip install django==1.8.2
3.使用pip list 查看虚拟环境中安装了哪些python包
很明显,Django环境安装成功。在这里我们使用的是Django1.8.2版本,下面不再阐述,请读者注意阅读。

创建项目

1.先创建一个文件夹作为我们的代码文件夹

2.进入到创建的文件夹,然后在此文件夹中创建一个项目
3.进入test1,查看项目目录如下:
4.项目目录下文件各文件的作用
- init.py: 说明test1是一个python包。
- settings.py: 项目的配置文件
- urls.py: 进行url路由的配置
- wsgi.py: (wsgi协议)web服务器和Django交互的入口
- manage.py: 项目的管理文件

创建应用

应用就是项目中的一个模块,就是一个功能,一个项目由很多个应用组成,每一个应用完成一个特定的功能。

1.创建应用时需要先进入项目目录。(因为要使用manage.py去创建)
2.使用 python manager.py startapp 应用名 来创建应用
可以发现项目目录中多了booktest文件夹。
3.进入booktest,查看应用目录如下:
4.应用目录下各文件的作用
- init.py: 说明目录是一个python模块
- models.py: 处理数据库相关的功能
- views.py: 接受请求,进行处理,与M和T进行交互,返回应答
- 定义处理函数: 视图函数.
- tests.py: 写测试代码
- admin.py: 网站后台管理相关文件 (数据的增删改查)

注册应用

1.建立应用和项目之间的联系,需要对应用进行注册。 让我们先进入到代码文件夹zz04中,然后进入到项目文件夹test1中,再进入项目文件夹test1中的test1文件夹中,打来setting.py文件去进行应用注册。

2.在setting.py中的INSTALLED_APPS元组中去加入我们创建的应用,即可完成注册(注意最后一个应用后面要加上逗号),如下图:

启动 Django项目

想要启动Django项目,需要使用要manager.py,那么就要回到项目文件夹test1路径下去,然后使用如下语句启动Django项目:

python manage.py runserver

那么我们就使用谷歌浏览器或者火狐浏览器来测试一下我们的项目有没有创建成功
如图所示,项目创建成功,应用注册成功!

模型类

模型类设计

1.设计模型类就需要我们使用到PyCharm了,那么在这之前先把我们创建的zz04项目文件夹加入到PyCharm中去,如图:

可以发现,在项目文件夹test1中还包含了一个test1文件夹,这是一个和项目名同名的项目配置文件夹,我们会在后面去介绍,而应用文件夹下的migrations意为迁移的意思,这里面存放着迁移文件,目前里面只有__init__.py文件,因为我们还没有去生成迁移文件。
2.在项目文件夹下的models.py文件中设计模型类,如下图:

from django.db import models# Create your models here.#图书类class BookInfo(models.Model):    '''图书模型类'''    btitle=models.CharField(max_length=20)  #设置图书名为字符串且最大长度为20    bpub_date=models.DateField()        #设置图书出版日期类型为日期class HeroInfo(models.Model):    '''英雄人物类'''    hname=models.CharField(max_length=20)   #英雄人物名字符串最大长度20    hgender=models.BooleanField(default=False)  #性别默认为男    hcomment=models.CharField(max_length=128)   #英雄备描述最长128    hbook=models.ForeignKey('BookInfo')     #设置外键,建立图书类和英雄人物类的关系

模型类生成表

在PyCharm中设计好模型以后,那么我们就回到终端让模型类生成表

1.生成迁移文件

python manage.py makemigrations

那么回到PyCharm中,查看一下存放迁移文件的migrations文件夹,里面多了一个0001_initial.py文件,如下图:
生成的代码如下:

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.db import models, migrationsclass Migration(migrations.Migration):dependencies = []operations = [    migrations.CreateModel(        name='BookInfo',        fields=[            ('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID', primary_key=True)),            ('btitle', models.CharField(max_length=20)),            ('bpub_date', models.DateField()),        ],    ),    migrations.CreateModel(        name='HeroInfo',        fields=[            ('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID', primary_key=True)),            ('hname', models.CharField(max_length=20)),            ('hgender', models.BooleanField(default=False)),            ('hcomment', models.CharField(max_length=128)),            ('hbook', models.ForeignKey(to='booktest.BookInfo')),        ],    ),]

那么可以发现,迁移文件是根据模型类生成的,而其中的primary_key我们并没有定义,其实这是Django为我们自动生成的,因为每个表里面都少不了ID主键。

2.执行迁移生成表
回到终端,使用如下命令,执行迁移文件从而生成表

python mange.py migrate

sqlite3数据库

1.那么我们们通过执行迁移文件生成的表去哪里了呢?表是存在数据库里的,但是数据库又在哪里?我们来看一下我们项目配置文件下的settings.py文件里面关于数据库的配置信息:

sqlite3也是一个关系型数据库,只不过是一个小型的,常用于手机端。在这里我们就sqlite3数据库来演示我们的操作。
2.数据库在哪里放着的呢?
我们回到终端,来到项目文件夹test1文件夹所在路径,然后ls看一下,就看到sqlite3数据库了:
3.打开sqlite3数据库
想要打开sqlite3数据库需要安装一个软件(需要联网),回到终端,在项目文件夹所在路径下使用如下命令安装sqliteman软件:

sudo apt-get install sqliteman

下载结束后,我们直接使用sqliteman命令来打来sqliteman数据库:

接下来我们把我们项目中的数据库导入到软件中来,按如下步骤执行(记住我们项目的数据库在哪个文件夹下):
找到数据库所在文件夹
可以看到我们创建的模型类在执行迁移文件之后生成的表格,如下:
那么我们还可以发现,Django中生成的表的名称默认是:应用名_模型类名小写 注意: 外键hbook在数据库表中叫做:hbook_id. 与bookinfo表中的id有外键关系

通过模型类操作数据表

1.使用如下命令进入shell:

python manager.py shell

2.向booktest_bookinfo表中插入一条数据
3.回到sqlite3数据库去看看数据有没有插入成功
4.在shell中查询出BookInfo中的数据
.
5.在shell中修改BookInfo中的数据
回到sqlite3数据库中查看数据有没有修改成功:
6.删除图书数据
因为b2是我们获取到的BookInfo表中id为1的对象,那么只要删除b2,id=1的这条记录就会被删除。shell语句如下,执行后发现sqlite3数据库中id=1的数据已经不复存在了。

b2.delete()

7.根据BookInfo来给HeroInfo来插入数据

首先还是将我们刚才删除的BookInfo中的数据来还原一下,然后再去给HeroInfo插入数据,执行代码如下:

from booktest.models import BookInfo,HeroInfo b=BookInfo() b.btitle='天龙八部' from datetime import date b.bpub_date=date(1992,11,10) b.save() h=HeroInfo() h.hname='段誉' h.hgender=False h.hcomment='凌波微步' h.hbook=b h.save()

那么此时,在BookInfo和HeroInfo里面分别都存在有数据,到sqlite3中查看如下:

注意: 虽然我们在代码中给hbook赋值的是一个bookinfo对象.但是在数据库中是以bookinfo的id存储的。
8.其他的一些操作
代码如下:

h2=HeroInfo() h2.hname='乔峰' h2.hcomment='降龙十八章' h2.hbook=b h2.save() h3=HeroInfo.objects.get(id=2) h3.hname'乔峰' h3.hgenderFalse h3.hcomment'降龙十八章' h3.hbook_id3 h3.hbook
h3.hbook.btitle'天龙八部'

9.查询图书表里面的所有内容

可以发现这种方式获取的都是对象类型
10.关系操作

一端获取多端所有数据的语法 : 一端对象.多端model**类名小写**_set.all();
多端获取一端对应的数据的语法: 多端对象.外键属性(models中定义的外键属性).

小结

以上,我们先创建虚拟环境,然后在虚拟环境中安装Django环境,然后创建一个项目test1,接着创建应用booktest,然后在settings中设计模型类,设计好模型类以后,在虚拟环境的终端中生成迁移文件,然后执行迁移文件,让模型类转变生成表,再去sqlite3数据库中查看生成的表。最后在虚拟环境的shell中向表中插入数据,然后将BookInfo和HeroInfo关联起来,实现可以双向互查信息的功能。最终实现了模型到数据库可视化表的转换。

后台管理

1.语言和时间的本地化

首先让我们来到PyCharm中,打开项目配置文件test1中的settings.py文件,找到如下图所示内容,并修改如下:
2.创建管理员
回到虚拟环境的终端中去,执行以下命令,创建一个管理员:

python manage.py createsuperuser

然后重新启动服务器:
浏览器登录后台,输入用户名和密码,登录成功界面如下:

但是这个界面没有我们想要管理的BookInfo和HeroInfo.
要想有,需要配置.
3.注册模型类
在应用下的admin.py中注册模型类,告诉djang框架根据注册的模型类来生成对应表管理页面。那么现在进入PyCharm中,打开应用文件夹下的admin.py文件,找到下图内容,并修改如下:
然后回到浏览器后台界面,刷新就可以看到如下界面:
点击一个进去发现显示如下图:
这里显示的并不是我们定义的字段名,其实只要修改一下就行了。来到PyCharm中,应用文件booktest文件夹下的models.py文件,分别重写模型类的__str__魔法方法如下:
再返回到浏览器后台中去刷新浏览器,显示如下:
4.自定义管理页面
自定义模型管理类。模型管理类就是告诉django在生成的管理页面上显示哪些内容。因为我们现在只显示了书名和人名,我们想让定义的所有字段都显示出来,那么回到PyCharm中,打开应用文件夹下的admin.py文件,增加一下代码即可:

from django.contrib import adminfrom booktest.models import BookInfo,HeroInfo  #先导入才能注册#自定义管理界面class BookInfoAdmin(admin.ModelAdmin):    #图书模型管理类    list_display = ['id','btitle','bpub_date']class HeroInfoAdmin(admin.ModelAdmin):    #图书模型管理类    list_display = ['id','hname','hcommemt']# Register your models here.admin.site.register(BookInfo,BookInfoAdmin)admin.site.register(HeroInfo,HeroInfoAdmin)

那么再回到浏览器中刷新,显示如下:

视图

在Django中,通过浏览器去请求一个页面时,使用视图函数来处理这个请求的,视图函数处理之后,要给浏览器返回页面内容。

视图函数的使用

1.定义视图函数

视图函数定义在应用文件夹下的views.py文件中,例如:

def index(request):    #进行处理    return HttpResponse('hello python')

视图函数必须有一个参数request,进行处理之后,需要返回一个HttpResponse的类对象,hello python就是返回给浏览器显示的内容。

那么就让我们进入到PyCharm中,打开应用文件夹booktest文件夹下的view.py文件,进行如下修改:
2.进行url配置
url配置的目的是让建立url和视图函数的对应关系。url配置项定义在urlpatterns的列表中,每一个配置项都调用url函数。
url函数有两个参数,第一个参数是一个正则表达式,第二个是对应的处理动作。
配置url时,有两种语法格式:
a) url(正则表达式,视图函数名)
b) url(正则表达式,include(应用中的urls文件))
那么让我们先来到PyCharm中的项目配置文件test1中,打开urls.py文件,做出如下修改:
现在配置的url是除了匹配到admin之外,其余页面都会到booktest中的urls.py中去找相应的界面,那么我们就去应用文件夹下的booktest中去创建一个urls.py文件,并做出如下修改:
然后回到虚拟环境的终端中,重启服务器:

python manage.py runserver

最后在浏览器中查看结果如下:

至此,首页url配置成功!那么我现在修改一处,看看这种非修改后的结果,会给大家带来什么领悟!首先来到PyCharm中的项目配置文件夹下的urls.py文件中,将代码修改如下:
即将url配置中的正则表达式改成:

urlpatterns = [url(r'^admin/', include(admin.site.urls)),url(r'^a',include('booktest.urls')),]

那么如果我们现在去访问:8000/index会是什么界面呢?

你会发现,显示错误界面,那如果我们访问:8000/aindex这个界面呢?请看图:
此时找到了我们定义的首页界面,那么这是为什么呢?
当用户输入如时,去除域名和最前面的/,剩下aindex,拿aindex字符串到项目的urls文件中进行匹配,配置成功之后,去除匹配的a字符,那剩下的index字符串继续到项目的urls文件中进行正则匹配,匹配成功之后执行视图函数index,index视图函数返回内容hello python(程序中显示的是‘这是首页’)给浏览器来显示。

模板

那么到此我们返回了一个字符串给浏览器让其显示,这显然很low,现在我们想向前端那样给浏览器返回一个HTML页面,这样就会美观很多,那么想返回HTML页面,就要用到模板。模板不仅仅是一个html文件: django的模板可以在html中定义变量,有各种各样的模板语言,可以将html变为动态的.

模板文件的使用

1.创建模板文件

2.配置模板目录
然后打开项目配置文件夹下的settings.py文件,找到列表TEMPLATES做出如下修改:
在这里,BASE_DIR是项目目录的绝对路径,即不管程序运行在哪么路径下面,所有的路径都以程序当前所在路径为基础来定位。
3.创建模板文件
来到templates文件夹中,新建一个文件夹名字和我们应用名相同为booktest,然后在新建的booktest中新建index.html文件如下:
4.使用模板文件
直接使用Django封装好的渲染函数render来使用相关模板
具体代码:

def index(request):# return HttpResponse('这是首页')return render(request,'booktest/index.html')    #这个地址是以templates为基准的

那么使用浏览器访问页面就可以显示如下界面:
5.给模板传递参数
render有三个参数,第一个为request,这是必须存在的,第二个为使用的相关模板文件,第三个就是给模板传递的参数与数据。那么我们在视图里面先去传递这些参数:
然后在去模板里面使用这些被传递过来的参数。如下:
现在再去浏览器访问页面,如下:

完善功能

我们想要在网页显示图书目录列表,以及点击图书以后可以查询到图书中的英雄人物信息,那么我们直接上代码,有了以上的这些基础,想必大家是能看得懂的。

1.来到应用文件夹booktest下打来urls.py文件,增加代码如下:
2.来到views.py文件中,定义相应的视图函数,如下:
3.在模板文件夹templates下的booktest文件夹中分别定义模板文件detail.html和show_books.html,如下:
4.在浏览器中查看如下界面:

总结

至此,一个使用Django创建的简单网页已经建立完成,在这里只是引导入门,想深入了解的可以继续关注本博客,不足之处望赐教!

转载地址:https://blog.csdn.net/weixin_40612082/article/details/80646787 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:django no such table :auth_user
下一篇:Ubuntu中使用pip时 ImportError: cannot import name main

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月05日 13时49分54秒