虚拟环境 10-17

1、创建虚拟环境

首先安装虚拟环境,命令如下:

sudo pip3 install virtualenv #安装虚拟环境

接下来还要安装虚拟环境扩展包,命令如下:

sudo pip3 install virtualenvwrapper

安装虚拟环境包装器的目的是使用更加简单的命令来管理虚拟环境。
修改用户家目录下的配置文件.bashrc,添加如下内容:

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

使用source .bashrc命令使配置文件生效。

创建python3虚拟环境的命令如下:

mkvirtualenv -p python3 虚拟环境名称
例:
mkvirtualenv -p python3 h1_django

如果虚拟环境没有创建成功可以升级一下pip包管理工具后重新一下虚拟环境:

sudo pip3 --default-timeout=10000 install --upgrade pip

退出虚拟环境的命令如下:

deactivate

使用切换虚拟环境

workon h1_django

删除虚拟环境命令如下:

rmvirtualenv 虚拟环境名称
例:
先退出: deactivate
再删除: rmvirtualenv h1_django

安装Django包

mkvirtualenv h1_django

然后安装django1.11的包,命令如下:

pip install django==1.11

2、创建项目

在当前用户的某个目录下创建项目,这样不会发生权限问题。
此处在/home/wengwenyu/django_project目录下创建项目

cd /home/wengwenyu/
mkdir django_project
cd django_project

创建项目的命令如下:

django-admin startproject 项目名称
例:
django-admin startproject test1

3、创建应用

pythton3 manage.py startapp booktest

_init.py_是一个空文件,表示当前目录booktest可以当作一个python包使用。
tests.py文件用于开发测试用例,在实际开发中会有专门的测试人员,这个事情不需要我们来做。
models.py文件跟数据库操作相关。
views.py文件跟接收浏览器请求,进行处理,返回页面相关。
admin.py文件跟网站的后台管理相关。 migrations文件夹之后给大家介绍。

4、把应用加入到INSTALLED——APPS

在test1/settings.py中INSTALLED_APPS下添加应用的名称
'booktest',

在开发阶段,为了能够快速预览到开发的效果,django提供了一个纯python编写的轻量级web服务器,仅在开发阶段使用。

运行服务器命令如下:
python manage.py runserver ip:端口
例:
python manage.py runserver

可以不写IP和端口,默认IP是127.0.0.1,默认端口为8000。
紧接着在浏览器中输入网址“127.0.0.1:8000”,或者按着ctrl键点击上图中标示出来的地址,可以查看当前站点开发效果。

5、创建model

根据设计,在models.py中定义模型类如下:

from django.db import models
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()

6、生成迁移文件

python3 manage.py makemigrations

7、执行迁移命令如下:

python3 manage.py migrate

使用sqliteman打开db.sqlite3文件进行查看。如果没有安装sqliteman,需要先使用如下命令进行安装。

sudo apt-get install sqliteman

安装成功之后,在终端输入sqliteman命令,敲击回车即可打开软件。

数据表的默认名称为:

<app_name>_<model_name>
例:
booktest_bookinfo

booktest/models.py,定义英雄类代码如下:

class HeroInfo(models.Model):
hname = models.CharField(max_length=20)
hgender = models.BooleanField()
hcomment = models.CharField(max_length=100)
hbook = models.ForeignKey('BookInfo')

数据操作

完成数据表的迁移之后,下面就可以通过进入项目的shell,进行简单的API操作。如果需要退出项目,可以使用ctrl+d快捷键或输入quit()。

进入项目shell的命令:

python manage.py shell

选区_205

首先引入booktest/models中的类:

from booktest.models import BookInfo,HeroInfo

查询所有图书信息:

BookInfo.objects.all()

因为当前并没有数据,所以返回空列表
新建图书对象:

b=BookInfo()
b.btitle="射雕英雄传"
from datetime import date
b.bpub_date=date(1991,1,31)
b.save()

再次查询所有图书信息:

BookInfo.objects.all()

查找图书信息并查看值:

b=BookInfo.objects.get(id=1)
b
b.id
b.btitle
b.bpub_date

修改图书信息:

b.bpub_date=date(2017,1,1)
b.save()
b.bpub_date

删除图书信息:

b.delete()

对象的关联操作

创建一个BookInfo对象

b=BookInfo()
b.btitle='abc'
b.bpub_date=date(2017,1,1)
b.save()

创建一个HeroInfo对象

h=HeroInfo()
h.hname='a1'
h.hgender=False
h.hcomment='he is a boy'
h.hbook=b
h.save()

图书与英雄是一对多的关系,django中提供了关联的操作方式。

获得关联集合:返回当前book对象的所有hero。

b.heroinfo_set.all()

8、创建管理员

按提示输入用户名、邮箱、密码。

python3 manage.py createsuperuser

启动服务器

python manage.py runserver

打开浏览器,在地址栏中输入如下地址后回车。

http://127.0.0.1:8000/admin/

最终booktest/admin.py文件代码如下

、、、

from django.contrib import admin
from booktest.models import BookInfo,HeroInfo
class BookInfoAdmin(admin.ModelAdmin):
list_display = ['id', 'btitle', 'bpub_date']
class HeroInfoAdmin(admin.ModelAdmin):
list_display = ['id', 'hname','hgender','hcomment']
admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(HeroInfo,HeroInfoAdmin)

、、、

9、在应用创建urls,并且把urls配置项目里面urls

在booktest/应用下创建urls.py文件,定义代码如下:

from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('booktest.urls')),
]

请求访问

http://127.0.0.1:8000/

10、创建模板

  • 为应用booktest下的视图index创建模板index.html,目录结构如下图:


    d766db6a-2ef2-4065-bd35-d3a4e728c428.png
  • 设置查找模板的路径:打开test1/settings.py文件,设置TEMPLATES的DIRS值

'DIRS': [os.path.join(BASE_DIR, 'templates')],

定义模板

打开templtes/booktest/index.html文件,定义代码如下:

<html>
<head>
<title>图书列表</title>
</head>
<body>
<h1>{{title}}</h1>
{%for i in list代码段%}
{{i变量名}}
{%endfor%}
</body>
</html>

#视图调用模板
打开booktst/views.py文件,调用上面定义的模板文件

from django.http import HttpResponse4、把应用加入到INSTALLED——APPS
from django.template import loader
def index(request):
template=loader.get_template('booktest/index.html')
context={'title':'图书列表','list':range(10)}
return HttpResponse(template.render(context))

视图调用模板简写

打开booktst/views.py文件,调用render的代码如下:

from django.shortcuts import render
def index(request):
context={'title':'图书列表','list':range(10)}
return render(request,'booktest/index.html',context)

11、在views写获取数据,加载模块 渲染模块

1. 定义视图

编写booktest/views.py文件如下:

from django.shortcuts import render
from booktest.models import BookInfo
#首页,展示所有图书
def index(reqeust):
#查询所有图书
booklist = BookInfo.objects.all()
#将图书列表传递到模板中,然后渲染模板
return render(reqeust, 'booktest/index.html', {'booklist': booklist})
#详细页,接收图书的编号,根据编号查询,再通过关系找到本图书的所有英雄并展示
def detail(reqeust, bid):
#根据图书编号对应图书
book = BookInfo.objects.get(id=int(bid))
#查找book图书中的所有英雄信息
heros = book.heroinfo_set.all()
#将图书信息传递到模板中,然后渲染模板
return render(reqeust, 'booktest/detail.html', {'book':book,'heros':heros})

2.定义URLconf

编写booktest/urls.py文件如下:

  from django.conf.urls import url
  #引入视图模块
  from booktest import views
  urlpatterns = [
#配置首页url
url(r'^$', views.index),
#配置详细页url,\d+表示多个数字,小括号用于取值,建议复习下正则表达式
url(r'^(\d+)/$',views.detail),
]

3.定义模板

编写templates/booktest/index.html文件如下:

<html>
<head>
<title>首页</title>
</head>
<body>
<h1>图书列表</h1>
<ul>
{#遍历图书列表#}
{%for book in booklist%}
<li>
{#输出图书名称,并设置超链接,链接地址是一个数字#}
<a href="/{{book.id}}/">{{book.btitle}}</a>
</li>
{%endfor%}
</ul>
</body>
</html>

编写templates/booktest/detail.html文件如下:

<html>
<head>
<title>详细页</title>
</head>
<body>
{#输出图书标题#}
<h1>{{book.btitle}}</h1>
<ul>
{#通过关系找到本图书的所有英雄,并遍历#}
{%for hero in heros%}
{#输出英雄的姓名及描述#}
<li>{{hero.hname}}---{{hero.hcomment}}</li>
{%endfor%}
</ul>
</body>
</html>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容