在这里介绍一下能让刚开始学Django的同学简单入门操作 以及软件的安装
Django简介:
Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,
并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站,
而开发出来了这个框架,于2005年7月在BSD许可证下发布。
这个名称来源于比利时的爵士音乐家DjangoReinhardt,他是一个吉普赛人,
主要以演奏吉它为主,还演奏过小提琴等。
由于Django在近年来的迅速发展,应用越来越广泛,
被著名IT开发杂志SDTimes评选为2013SDTimes100,
位列"API、库和框架"分类第6位,被认为是该领域的佼佼者。
Django的主要目的是简便、快速的开发数据库驱动的网站。
它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,
Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。
这使得Django具有很强的可扩展性。它还强调快速开发原则。
Django入门前的必备工作:
ubuntu mysql redis python3.0 pycharm 谷歌浏览器
这些软件要下载安装好,后期我们会经常用到
在python环境中下载django:
pip install django==1.11.11,这里推荐安装这个版本的,比较好用
cd .virtualenvs/zhuang111/bin查看一下有没有安装好,这里的zhuang111是python环境。
这时候可以创建一个新项目了,可以选择pycharm的工作路径,创建一个文件,
在里面创建项目,也可以随便不进去就创建项目。
创建django项目
django-admin startproject name
查看测试:
tree可以查看创建的项目格式,里面有个manage.py文件
可以用python manage.py runserver启动
django中的目录文件:
__init__.py:他是项目的初始化文件 有了这个文件 标志当前文件夹是一个包,可以被引用
settings.py:所有的django的配置信息都在这里面
包括数据库的配置 静态文件的配置
还有django依赖的第三方扩展包
urls.py:他就是我刚刚提到的路由分发器
wsgi.py:是一个服务器的启动文件,后期项目上线需要用到他
manage.py:他是整个Django项目的启动文件
项目创建好之后,我们需要创建django_app:
python manage.py startapp name
运行django:
进入项目目录后 执行python manage.py runserver
settings文件的配置:
语言改成:zh-hans 如:LANGUAGE_CODE = 'zh-hans'
时区改成:Asia/Shanghai 如:TIME_ZONE = 'UTC'
创建完App以后 要记得在settings文件中进行注册,把App加进去
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'App',
]
templates模板也要配置进去:
os.path.join(BASE_DIR,'template'),如果直接在pycharm中直接创建的话就不需要设置这个了。
django连接数据库
链接mysql步骤:
第一步:pip install pymysql
第二步:在项目的__init__文件中添加代码
import pymysql
pymysql.install_as_MySQLdb()
第三步:找到mysql的连结源,然后填信息
如果没有mysql驱动 需要下载MySQL驱动
第四步:进入项目然后执行迁移文件
python manage.py makemigrations
python manage.py migrate
连接mysql必须在settings设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "zhuang1", #这个是你创建的数据库
'USER': "root",
'PASSWORD': "123456",
'HOST': "localhost",
'PORT': "3306",
}
}
这里简单创建一个学生表
创建一个Student表,然后保存数据
第一步:
在models类中写:
class Student(models.Model):
s_name = models.CharField(max_length=32)
s_age = models.IntegerField(default=18)
第二步:
执行迁移文件
python manage.py makemigrations
python manage.py migrate
第三步:
在urls类中写:
url(r'^addstu/', views.addStu),
在views类中写:
创建添加学生的函数:
def addStu(request):
stu = Student()
stu.s_name = "zhuang%d" % random.randrange(100) #引用random随机生成一个学生
stu.s_age = 19
stu.save()
return HttpResponse("数据保存成功")
第四步:
执行访问
python manage.py runserver
j简单的学生表就建立好了,可以进去谷歌浏览器查看内容
规划咱们的路由:
为什么规划路由:
随着应用的增多,视图函数之间难免出现冲突,为了避免这种冲突
我们将路由规划为包含的样式
第一步:
在各自的应用下方创建urls.py文件
如果不会写,copy工程目录下的文件
第二步:
将工程目录下的urls.py修改为如下样式
url(r'App/',include('App.urls')),
url(r'Two/',include('Two.urls')),
第三步:
然后再在各自应用的urls.py中指定各自的路由,如下样式
url(r'^hello/', views.hello),
Django的一下基本命令用法
Django有两种过滤器用于筛选记录
filter :返回符合筛选条件的数据集
exclude :返回不符合筛选条件的数据集
查询集和过滤器:
返回查询集的方法
all() 返回所有数据
filter() 返回符合条件的数据
exclude() 过滤掉符合条件的数据
order_by() 排序
values() 一条数据就是一个字典,返回一个列表
返回单个数据的:
get():返回一个满足条件的对象
如果没有找到符合条件的对象,会引发 模型类.DoesNotExist异常
如果找到多个,会引发 模型类.MultiObjectsReturned 异常
first():返回查询集中的第一个对象
last():返回查询集中的最后一个对象
count():返回当前查询集中的对象个数
exists():判断查询集中是否有数据,如果有数据返回True没有反之
比较运算符:
contains:是否包含,大小写敏感,filter(sname__contains='赵')
startswith,endswith:以values开头或结尾,大小写敏感
以上四个在运算符前加上 i(ignore)就不区分大小写了 i就是iexact的意思
isnull,isnotnull:是否为空,filter(sname__isnull=False)
in:是否包含在范围内,filter(pk__in=[2,4,6,8])
gt,gte,lt,lte:大于,大于等于,小于小于等于filter(sage__gt=30)
聚合函数:
使用aggregate()函数返回聚合函数的值
Avg:平均值
Count:数量
Max:最大
Min:最小
Sum:求和
例如:Student.objects.aggregate(Max('sage'))
F对象:
可以使用模型的A属性与B属性进行比较
grades = Grade.objects.filter(gage__gt=F('gboynum') )
F对象支持算数运算
grades = Grade.objects.filter(gage__gt=F('gboynum') +10 )
Q对象:
过滤器的方法中的关键参数,常用于组合条件
年龄小于25
Student.objects.filter(Q(sage__lt=25))
Q对象语法支持 | (or), & (and), ~(取反)
年龄大于等于的
Student.objects.filter(~Q(sage__lt=25))
状态码:
2xx:访问成功
3xx:重定向
4xx:客户端错误
5xx:服务端错误
request请求的方式:
get:查询
post:新建操作或者更新
put:更新
delete:删除
模型类的继承
模型类的继承
模型类的继承:当子模型类 继承 父模型类的时候
一定要在父模型类的元信息中设置一个抽象属性 代码如下
class Fu(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField(default=0)
high = models.IntegerField(default=180)
注释:一定要加如下面的这个函数
class Meta:
abstract = True
class Zi(Fu):
weight = models.IntegerField(default=100)
class Nv(Fu):
hair = models.IntegerField(default=100)
这样操作才能保证我们在继承完毕以后,迁移的时候,
不会在数据库中生成多余的父类表。
url的带参传递写法:
url的带参传递写法:
url(r'^hello/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)', views.hello),
url(r'^hello/(\d+)/(\d+)/(\d+)/', views.hello),