Django model filter 条件过滤

1.条件选取querySet的时候,filter表示=,exclude表示!=。
querySet.distinct() 去重复
__exact 精确等于 like ‘aaa’
__iexact 精确等于 忽略大小写 ilike ‘aaa’
__contains 包含 like ‘%aaa%’
__icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以…开头
__istartswith 以…开头 忽略大小写
__endswith 以…结尾
__iendswith 以…结尾,忽略大小写
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False

例子:
>> q1 = Entry.objects.filter(headline__startswith=”What”)
>> q2 = q1.exclude(pub_date__gte=datetime.date.today())
>> q3 = q1.filter(pub_date__gte=datetime.date.today())
>>> q = q.filter(pub_date__lte=datetime.date.today())
>>> q = q.exclude(body_text__icontains=”food”)

即q1.filter(pub_date__gte=datetime.date.today())表示为时间>=now,q1.exclude(pub_date__gte=datetime.date.today())表示为<=now

 

2.booktest/views查询例子

# coding=utf-8
from django.shortcuts import render
from django.db.models import Max, F, Q
from booktest.models import BookInfo


def index(request):
    # list=BookInfo.books1.filter(heroinfo__hcontent__contains='六')
    # list=BookInfo.books1.filter(pk__lte=3)
    # Max1=BookInfo.books1.aggregate(Max('bpub_date'))
    # list=BookInfo.books1.filter(bread__gt=F('bcommet'))
    # list=BookInfo.books1.filter(pk__lt=4,btitle__contains='1')
    # list=BookInfo.books1.filter(pk__lt=4).filter(btitle__contains='1')
    list = BookInfo.books1.filter(Q(pk__lt=4) | Q(btitle__contains='1'))
    context = {'list1': list
               # ,'Max1':Max1
               }
    return render(request, 'booktest/index.html', context)

 

Django模型自定义管理器

1.创建app

python manage.py startapp booktest

2.setting添加booktest

3.编写booktest/models.py

 

from django.db import models


class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)
    bpub_date = models.DateTimeField(db_column='pub_date')
    bread = models.IntegerField(default=0)
    bcommet = models.IntegerField(null=False)
    isDelete = models.BooleanField(default=False)

    class Meta:
        db_table = 'bookinfo'


class HeroInfo(models.Model):
    hname = models.CharField(max_length=10)
    hgender = models.BooleanField(default=True)
    hcontent = models.CharField(max_length=1000)
    isDelete = models.BooleanField(default=False)
    book = models.ForeignKey(BookInfo, null=True, blank=True, on_delete=models.SET_NULL)

4.数据迁移

python manage.py makemigrations
python manage.py migrate

 

5.编写模型管理类

from django.db import models


class BookInfoManager(models.Manager):
    def get_queryset(self):
        # return super(BookInfoManager, self).get_queryset().filter(isDelete=False)
        return super().get_queryset().filter(isDelete=False)

    def create(self, btitle, bpub_date):
        b = BookInfo()
        b.btitle = btitle
        b.bpub_date = bpub_date
        b.bread = 0
        b.bcommet = 1
        b.isDelete = False
        return b


class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)
    bpub_date = models.DateTimeField(db_column='pub_date')
    bread = models.IntegerField(default=0)
    bcommet = models.IntegerField(null=False)
    isDelete = models.BooleanField(default=False)

    class Meta:
        db_table = 'bookinfo'

    books1 = models.Manager()
    books2 = BookInfoManager()

    @classmethod
    def create(cls, btitle, bpub_date):
        b = BookInfo()
        b.btitle = btitle
        b.bpub_date = bpub_date
        b.bread = 0
        b.bcommet = 1
        b.isDelete = False
        return b


class HeroInfo(models.Model):
    hname = models.CharField(max_length=10)
    hgender = models.BooleanField(default=True)
    hcontent = models.CharField(max_length=1000)
    isDelete = models.BooleanField(default=False)
    book = models.ForeignKey(BookInfo, null=True, blank=True, on_delete=models.SET_NULL)

注:两种创建方式,推荐在BookInfoManager写create方法。

 

6.booktest/views.py测试增加数据

from django.shortcuts import render
from django.http import *
from django.template import RequestContext, loader
from booktest.models import BookInfo
import datetime


# Create your views here.
def index(request):
    nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    BookInfo.books2.create('使用类对象方式创建', nowTime).save()
    bookList = BookInfo.books2.all()
    context = {'list': bookList}
    return render(request, 'booktest/index.html', context)

 

 

 

 

Django模型字段说明

一.mysql客户端安装

pip install mysqlclient

 

二.模型字段说明

编号 字段类型Filed Types
1 AutoField 如果没有指明主键,就会产生一个自增的主键。
2 BigIntegerField 64位的整型数值,从 -2^63 (-9223372036854775808) 到 2^63-1(9223372036854775807)。
3 BinaryField 存储二进制码的Field. 只支持bytes 赋值。
4 BooleanField 该字段的默认表单控件是CheckboxInput,如果你需要设置null 值,则使用NullBooleanField 来代替BooleanField。
5 CharField 用来存储字符串
6 TextField 用来存储大字符串
7 CommaSeparatedIntegerField 一个逗号分隔的整数字段。
8 DateField 使用Python的datetime.date实例保存的日期。auto_now = True:每次保存对象时,自动设置该字段为当前时间;auto_now_add=True:对象第一次被创建时自动设置当前时间。需要注意的是,自动保存的时间的时区使用的是默认时区。
9 DateTimeField 使用Python的datetime.datetime实例表示的日期和时间。
10 DecimalField 用python中 Decimal 的一个实例来表示十进制浮点数。
11 DurationField 用来存储一段时间,类似Python中的timedelta。
12 EmailField 它和CharField类似,只不过比CharField多了自动校验输入的值是否符合Email格式的功能。它使用 EmailValidator 来验证输入合法性。
13 FileField 一个上传文件的字段。它有两个可选属性:
1. FileField.upload_to :它的值是一个本地文件系统的路径,这个路径将被追加到MEDIA_ROOT设置中。MEDIA_ROOT在settings中,用来指定用户上传文件的存放路径。
2. FileField.storage用来指定Storage 对象。例如:
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location=’/media/photos’)
class Car(models.Model):
photo = models.ImageField(storage=fs)
14 FilePathField 如果,你想使用文件系统中的文件,而不是用户上传的文件,请使用FilePathField。例如:from django.conf import settings
class Document(models.Model):
audio = models.FilePathField(path=settings.FILE_PATH_FIELD_DIRECTORY)
15 FloatField 用Python的一个float 实例来表示一个浮点数。
16 ImageField 是FileField的子类,比FileField多了有效图片校验功能,确保它是个有效的image。
17 IntegerField 整数字段。
18 GenericIPAddressField 一个 IPv4 或 IPv6 地址, 字符串格式 (例如 192.0.2.30 或 2a02:42fe::4). 这个字段的默认表单小部件是一个TextInput。
19 PositiveIntegerField 类似 IntegerField, 但值必须是正数或者零(0)。
20 PositiveSmallIntegerField 小于32767 的正整数。
21 SlugField Slug 是一个新闻术语(通常叫做短标题)。一个slug只能包含字母、数字、下划线或者是连字符,通常用来作为短标签。通常它们是用来放在URL里的。
22 SmallIntegerField -32768 至 32767的整数。
23 TextField 大文本字段。该模型默认的表单组件是Textarea。
24 TimeField 时间字段,和Python中 datetime.time 一样。
25 URLField 一个CharField 类型的URL。
26 UUIDField 一个用来存储UUID的字段。使用Python的UUID类。
27 ForeignKey 多对一关系
28 ManyToManyField 多对多关联
29 OneToOneField 一对一关联关系

 

 

三.Django-Model字段选项

参数名

意义

null 

如果设置为 True 的话,Django将在数据库中存储空值为 NULL 。默认为 False 。 

blank 

如果是 True ,该字段允许留空,默认为 False 。

choices

一个包含双元素元组的可迭代的对象,用于给字段提供选项。

db_column

当前字段在数据库中对应的列的名字。

db_index

如果为 True ,Django会在创建表格(比如运行 manage.py syncdb )时对这一列创建数据库索引。

default

字段的默认值

editable 

如果为 False ,这个字段在管理界面或表单里将不能编辑。默认为 True 。

help_text 

在管理界面表单对象里显示在字段下面的额外帮助文本。

primary_key

如果为 True ,这个字段就会成为模型的主键。

radio_admin 

默认地,对于 ForeignKey 或者拥有 choices 设置的字段,Django管理界面会使用列表选择框(<select>)。如果 radio_admin 设置为 True 的话,Django就会使用单选按钮界面。 

unique

如果是 True ,这个字段的值在整个表中必须是唯一的。

unique_for_date 

把它的值设成一个 DataField 或者 DateTimeField 的字段的名称,可以确保字段在这个日期内不会出现重复值。

unique_for_month

和 unique_for_date 类似,只是要求字段在指定字段的月份内唯一。

unique_for_year

和 unique_for_date 及 unique_for_month 类似,只是时间范围变成了一年。

verbose_name

除 ForeignKey 、 ManyToManyField 和 OneToOneField 之外的字段都接受一个详细名称作为第一个位置参数。

 

四.Django模型之Meta选项详解

Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。而可用的选项大致包含以下几类

abstract

这个属性是定义当前的模型是不是一个抽象类。所谓抽象类是不会对应数据库表的。一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段。

Options.abstract
如果abstract = True 这个model就是一个抽象类

app_label

这个选型只在一种情况下使用,就是你的模型不在默认的应用程序包下的models.py文件中,这时候需要指定你这个模型是哪个应用程序的。

Options.app_label
如果一个model定义在默认的models.py,例如如果你的app的models在myapp.models子模块下,你必须定义app_label让Django知道它属于哪一个app
app_label = ‘myapp’

db_table

db_table是指定自定义数据库表明的。Django有一套默认的按照一定规则生成数据模型对应的数据库表明。
Options.db_table
定义该model在数据库中的表名称
db_table = ‘Students’
如果你想使用自定义的表名,可以通过以下该属性
table_name = ‘my_owner_table’

db_teblespace

Options.db_teblespace
定义这个model所使用的数据库表空间。如果在项目的settin中定义那么它会使用这个值

get_latest_by

Options.get_latest_by
在model中指定一个DateField或者DateTimeField。这个设置让你在使用model的Manager上的lastest方法时,默认使用指定字段来排序

managed

Options.managed
默认值为True,这意味着Django可以使用syncdb和reset命令来创建或移除对应的数据库。默认值为True,如果你不希望这么做,可以把manage的值设置为False

order_with_respect_to

这个选项一般用于多对多的关系中,它指向一个关联对象,就是说关联对象找到这个对象后它是经过排序的。指定这个属性后你会得到一个get_xxx_order()和set_xxx_order()的方法,通过它们你可以设置或者回去排序的对象

ordering

这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的。这是一个字符串的元组或列表,没有一个字符串都是一个字段和用一个可选的表明降序的’-‘构成。当字段名前面没有’-‘时,将默认使用升序排列。使用’?’将会随机排列

  • ordering=[‘order_date’] # 按订单升序排列
  • ordering=[‘-order_date’] # 按订单降序排列,-表示降序
  • ordering=[‘?order_date’] # 随机排序,?表示随机
  • ordering=[‘-pub_date’,’author’] # 以pub_date为降序,在以author升序排列

permissions

permissions主要是为了在Django Admin管理模块下使用的,如果你设置了这个属性可以让指定的方法权限描述更清晰可读。Django自动为每个设置了admin的对象创建添加,删除和修改的权限。
permissions = ((‘can_deliver_pizzas’,’Can deliver pizzas’))

proxy

这是为了实现代理模型使用的,如果proxy = True,表示model是其父的代理 model

unique_together

unique_together这个选项用于:当你需要通过两个字段保持唯一性时使用。比如假设你希望,一个Person的FirstName和LastName两者的组合必须是唯一的,那么需要这样设置:
unique_together = ((“first_name”, “last_name”),)
一个ManyToManyField不能包含在unique_together中。如果你需要验证关联到ManyToManyField字段的唯一验证,尝试使用signal(信号)或者明确指定through属性。

verbose_name

verbose_name的意思很简单,就是给你的模型类起一个更可读的名字一般定义为中文,我们:
verbose_name = “学校”

verbose_name_plural

这个选项是指定,模型的复数形式是什么,比如:
verbose_name_plural = “学校”
如果不指定Django会自动在模型名称后加一个’s’

 

Django传递数据

1.添加booktest/models.py模型

from django.db import models


class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)
    bpub_date = models.DateTimeField()

    def __str__(self):
        return self.btitle


class HeroInfo(models.Model):
    hname = models.CharField(max_length=10)
    hgender = models.BooleanField()
    hcontent = models.CharField(max_length=1000)
    hbook = models.ForeignKey(BookInfo, null=True, blank=True, on_delete=models.SET_NULL)

    def __str__(self):
        return self.hname


2.数据迁移
python manage.py makemigrations
python manage.py migrate

3.添加booktest/admin后台管理关联
from django.contrib import admin
from .models import HeroInfo, BookInfo


class HeroInfoInline(admin.TabularInline):
    model = HeroInfo
    extra = 3


class BookInfoAdmin(admin.ModelAdmin):
    list_display = ['id', 'btitle', 'bpub_date']
    list_filter = ['btitle']
    search_fields = ['btitle']
    list_per_page = 10
    fieldsets = [
        ('base', {'fields': ['btitle']}),
        ('super', {'fields': ['bpub_date']})
    ]
    inlines = [HeroInfoInline]


admin.site.register(BookInfo, BookInfoAdmin)
admin.site.register(HeroInfo)

注:手动去后台添加几条数据,以下查询使用

4.编写视图booktest/views.py
from django.shortcuts import render
from django.http import *
from django.template import RequestContext, loader
from .models import BookInfo


# Create your views here.
def index(request):
    bookList = BookInfo.objects.all()
    context = {'list': bookList}
    return render(request, 'booktest/index.html', context)

def show(request, id):
    book = BookInfo.objects.get(pk=id)
    herolist = book.heroinfo_set.all()
    context = {'list': herolist}
    return render(request, 'booktest/show.html', context)

注:heroinfo_set查询book下的集合

5.编写路由booktest/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index),
    path('<int:id>/', views.show),
]



6.编写templates/booktest/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BookTest</title>
</head>
<body>
<h1>index</h1>
<ul>
    {% for book in list %}
        <li><a href="{{ book.id }}">{{ book.btitle }}</a></li>
    {% endfor %}
</ul>
</body>
</html>

7.编写templates/booktest/show.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BookTest</title>
</head>
<body>
<h1>show</h1>
<ul>
    {% for hero in list %}
        <li>{{ hero.hname }}</li>
    {% endfor %}
</ul>
</body>
</html>
8.访问地址

http://127.0.0.1:8000/booktest/index/

	

Django使用模板

一.模板添加

1.新建app

python manage.py startapp booktest

2.配置setting.py添加新建app名booktest

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'booktest',
    'blog',
]
3.配置根目录urls
from django.contrib import admin
from django.urls import path
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),
    path('booktest/', include('booktest.urls'))
]
4.配置booktest中的urls
from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index)
]

5.根目录会有templates文件,新建booktest/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BookTest</title>
</head>
<body>
    <h1>您好,世界!</h1>
</body>
</html>

6.编写视图
(1)方式一:
from django.shortcuts import render
from django.http import *
from django.template import RequestContext, loader


# Create your views here.
def index(request):
    temp = loader.get_template('booktest/index.html')
    return HttpResponse(temp.render())

(2)方式二:
from django.shortcuts import render
from django.http import *



# Create your views here.
def index(request):
    return render(request, 'booktest/index.html')

注:推荐方式二,其中原理内部封装也是方式一

 

7.访问地址

http://127.0.0.1:8000/booktest/index/

 

Django视图与urls

一.视图

1.编辑blog/views.py

from django.shortcuts import render
from django.http import *


# Create your views here.
def index(request):
    return HttpResponse('Hello World!')

注:这里先编辑最简单视图,页面输出Hello World!


二.urls配置

一.配置setting.py文件

from django.contrib import admin
from django.urls import path
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),
    path('booktest/', include('booktest.urls'))
]
注:这里独立每个文件urls的路由!blog是一个app,booktest是另外一个app!

二.blog/urls.py设置路由
from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index)
]

三.访问地址
http://127.0.0.1:8000/blog/index/


Django后台管理

一.后台管理搭建

1.新建一个app

python manage.py startapp blog

注:前提已经有建立好Django项目,见环境搭建。执行上面命令,会在根目录下生成一个blog文件夹

2.编写blog/models

from django.db import models

# Create your models here.
class Article(models.Model):
    title = models.CharField(u'标题', max_length=256)
    content = models.TextField(u'内容')

    pub_date = models.DateTimeField(u'发表时间')
    create_date = models.DateTimeField(u'创建时间', auto_now_add=True, editable=True)
    update_time = models.DateTimeField(u'更新时间', auto_now=True, null=True)

    def __str__(self):
        return self.title

class Category(models.Model):
    name = models.CharField(u'分类名称', max_length=64)
    type = models.IntegerField(u'分类类型')
    # 表示外键关联到文章表,当文章表删除了该条数据,分类表中不删除,仅仅是把外键置空
    # https://blog.csdn.net/kuangshp128/article/details/78946316
    article_id = models.ForeignKey(Article, null=True, blank=True, on_delete=models.SET_NULL)

    def __str__(self):
        return self.name

注:这里分类等等后面后台管理关联使用!!!
其中注意2.0.5版本中外键参数需要设置on_delete!!!

3.把blog加入setting.py文件
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'booktest',
    'blog',
]
4.数据迁移
python manage.py makemigrations
python manage.py migrate
注:前提数据量有设置好,见:Django开发准备

5.创建管理员
python manage.py createsuperuser

注:根据提示设置设置账号密码

6.运行项目

python manage.py runserver

7.访问地址

http://127.0.0.1:8000/admin/

 

 

二.后台关联添加

1.编辑blog/admin.py文件

from django.contrib import admin
from .models import Article

admin.site.register(Article)

注:最简单的后台模型添加,会在后台自动生成blog列表

2.文章列表详情显示设置
from django.contrib import admin
from .models import Article


# 文章信息
class ArticleInfoAdmin(admin.ModelAdmin):
    list_display = ['id', 'title', 'content', 'pub_date', 'update_time']
    list_filter = ['title', 'content']
    search_fields = ['title']
    list_per_page = 10
    fieldsets = [
        ('basic', {'fields': ['title', 'content']}),
        ('more', {'fields': ['pub_date']})
    ]

admin.site.register(Article, ArticleInfoAdmin)

2.文章与分类关联设置

from django.contrib import admin
from .models import Article, Category


# 文章内联多个分类
class CategoryInfoInline(admin.TabularInline):
    model = Category
    extra = 3


# 文章信息
class ArticleInfoAdmin(admin.ModelAdmin):
    list_display = ['id', 'title', 'content', 'pub_date', 'update_time']
    list_filter = ['title', 'content']
    search_fields = ['title']
    list_per_page = 10
    fieldsets = [
        ('basic', {'fields': ['title', 'content']}),
        ('more', {'fields': ['pub_date']})
    ]
    inlines = [CategoryInfoInline]


admin.site.register(Article, ArticleInfoAdmin)
注:inlines 内联,前提是在models设置的时候,需要设置外键!!!否则会报错!!!

 

Django模型类

一.模板添加

1.新建app

python manage.py startapp booktest

python manage.py startapp blog

2.添加到setting.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'booktest',
    'blog',
]

3.编写各自模型

(1) . booktest/models

from django.db import models


class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)
    bpub_date = models.DateTimeField()

    def __str__(self):
        return self.btitle


class HeroInfo(models.Model):
    hname = models.CharField(max_length=10)
    hgender = models.BooleanField()
    hcontent = models.CharField(max_length=1000)
    hbook = models.ForeignKey(BookInfo, null=True, blank=True, on_delete=models.SET_NULL)

    def __str__(self):
        return self.hname

(2) . blog/models

from django.db import models


# Create your models here.
class Article(models.Model):
    title = models.CharField(u'标题', max_length=256)
    content = models.TextField(u'内容')

    pub_date = models.DateTimeField(u'发表时间')
    create_date = models.DateTimeField(u'创建时间', auto_now_add=True, editable=True)
    update_time = models.DateTimeField(u'更新时间', auto_now=True, null=True)

    def __str__(self):
        return self.title


class Category(models.Model):
    name = models.CharField(u'分类名称', max_length=64)
    type = models.IntegerField(u'分类类型')
    # 表示外键关联到文章表,当文章表删除了该条数据,分类表中不删除,仅仅是把外键置空
    # https://blog.csdn.net/kuangshp128/article/details/78946316
    article_id = models.ForeignKey(Article, null=True, blank=True, on_delete=models.SET_NULL)

    def __str__(self):
        return self.name

 

4.数据迁移

python manage.py makemigrations
python manage.py migrate

Django 开发准备

一.setting文件配置

0.进入虚拟环境,安装mysql客户端

workon django2.0

pip install mysqlclient

1.数据库配置

不使用自带的sqlite3数据库,连接mysql数据库

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
        'NAME': 'djangotest',
        'USER': 'gerry',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'CHARSET': 'utf8'
    }
}

2.时区和语言设置

语言:设置为中文

时区:设置为上海

LANGUAGE_CODE = ‘zh-hans’ # en-us
TIME_ZONE = ‘Asia/Shanghai’ # UTC
USE_I18N = True
USE_L10N = True
USE_TZ = False

 

3.静态文件访问位置

templates文件,2.0.5版本默认生成,默认也配置了,没有的话就自行拷贝以下代码
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',
            ],
        },
    },
]


Django 虚拟环境

前提安装pip,不懂得可以百度一下。

Windows 下:

 

一.virtualenv 安装

1.利用pip安装

pip install virtualenv virtualenvwrapper-win

2.虚拟环境更换位置(可选)

【可选】Windows下默认虚拟环境是放在用户名下面的Envs中的。我这里习惯将他移动到D盘。 更改方法:计算机,属性,高级系统设置,环境变量,添加WORKON_HOME。

 

 

二.虚拟环境使用

1.创建虚拟环境
mkvirtualenv env(环境名)

2.查看虚拟环境有哪些

workon

3.进入虚拟环境

workon django2.0

4.搭建django

pip install django

pip install -i https://pypi.douban.com/simple django

注:(二选一) 最新版本2.0.5,这里用了豆瓣的镜像,下载会比较快!

5.通过pycharm创建django项目

注:pycharm可以去官方下载!

6.查看django版本

python -m django –version

7.运行django

python manage.py runserver

注:进入工程根目录运行, manage.py所在的层级目录

8.访问网址

http://127.0.0.1:8000