*添加了中文注释,需要在文件头部添加 # -*- coding: UTF-8 -*-。*
日期格式默认值不能设置为空,不然数据格式会有问题。
pip list可查看安装的所有软件
djang安装步骤简单介绍:
1)先创建一个文件夹来存放所有的虚拟环境
2)进入该文件夹执行:virtualenv django1 -p python3.6 创建虚拟环境
3)激活虚拟环境:source django1/bin/activate
4)在虚拟环境下安装django:pip install django==1.11(1.11表示安装指定版本)
上述步骤完成之后可以在其他任何地方创建django项目,不过创建项目时需要先激活django环境
创建项目:django-admin startproject +项目名称(创建项目不一定要进入虚拟环境,可直接在终端执行前面的命令)
项目里面所包含的文件:
- manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。相当于是django的项目管理器
- __init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
- settings.py: 该 Django 项目的设置/配置。
- urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。就是url配置
- wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。(全程是:Web Server Gateway Interface 服务器网关接口,python应用与WEB服务器之间的接口)
创建app:django-admin startapp +应用名称 (创建好之后需要将应用添加到setting.py中的INSTALLED_APPS里面,这里需要注意的是:创建的应用名称不能和python的模块名称一样,否则会报错创建失败)
应用里面包含的文件:
migrations:数据移植(迁移)模块,内容自动生成
admin.py:该应用的后台管理系统配置
apps.py:当前应用的一些配置
models.py:数据模型模块,使用ORM框架,类似于MVC结构中的models
tests.py:自动化测试模块,django提供了自动化测试功能
views.py:执行响应的代码所在模块,代码逻辑处理的主要地点,项目中大部分代码均在这里编写
创建第一个响应(即HTTPResponse的服务器响应内容):
第二种URL配置方式(包含其他URL):
1)在根urls.py文件中引入include
2)在APP应用目录下创建一个urls.py文件,格式与根urls.py相同
3)根urls.py中url函数第二个参数改为include('blog.urls') blog为APP应用名
注意事项:根urls.py针对APP应用配置的URL名称,是该APP应用URL的总路径;配置时URL注意正则表达式结尾符号$和/
一、Templates介绍
步骤:
1)在APP应用目录下创建名叫templates的目录
2)在该templates目录下创建HTML文件
3)在view.py中返回render();render()有三个参数,前两个是必须的,render()
函数将请求对象作为它的第一个参数,模板的名字作为它的第二个参数,一个字典作为它可选的第三个参数。 它返回一个HttpResponse
对象,含有用给定的context 渲染后的模板。例:return render(request,'index.html')
DTL(Django templates language)模板语言,刚才说的第三个参数支持一个dict()类型,该字典是后台传递到模板的参数,键为参数名,在模板中使用{{}}来直接使用;例:return render(request,'index.html',{'hello':'hello,Blog!'})
Django查找templates:
1)Django按照INSTALLED_APPS中的添加顺序查找templates
2)不同APP应用下templates目录中同名.html文件会造成冲突;解决冲突方案:在APP应用的templates目录下创建以APP应用名为名称的目录,将html文件放入新创建的目录下;然后分别配置好各APP下urls.py和views.py文件及根目录下的urls.py文件
二、Models介绍;Django中的Models是什么?
Field字段介绍:
models.ForeignKey 字段外键类型
models.DateTimeField 字段时间类型
models.IntegerField 字段数值整型
models.IPAdresssField IP地址类型
models.FileField 上传文件时用到的字段类型
通常,一个Models对应数据库的一张数据表,Django中Models以类的形式表现,它包含了一些基本字段以及数据的一些行为
ORM:对象关系映射(Object Relation Mapping),实现了对象和数据库之间的映射,隐藏了数据访问的细节,不需要编写SQL语句
步骤:创建models.py文件(创建APP时系统已经自动创建),并引入models模块,创建类,继承models.Model,该类即是一张数据表,在类中创建字段
字段创建:字段即类里面的属性(变量),比如变量attr = models.CharField(max_lenth=200,verbose_name= '文章名称');(verbose_name可以看成是对字段的注释)
接下来生成数据表:1、先进入manage.py同级目录中;2、执行python manage.py makemigrations app(可选);3、再执行python manage.py migrate
上面步骤生成数据表之后:django会自动在对应app/migrations目录下生成移植文件/迁移文件,执行python manage.py sqlmigrate +应用名 +文件id(文件id就是migrations目录下的文件数字编号或者写文件的全称也行) 查看SQL语句
例:E:\myblog>python manage.py sqlmigrate blog 0001
默认sqlite3的数据库在项目根目录下db.sqlite3,可以使用第三方软件去打开该数据库,比如navicat
后台页面呈现数据:
1、对应app的views.py中import models 例句:article = models.Article.objects.get(id=1) (id表示主键,也可以使用其他非主键);2、render(request, page, {'article':article}) (page就是该应用下的html文档)
前端步骤:
模板可直接使用对象以及对象的“.”操作,article.后面的内容就是前面创建类时设置的字段
三、Admin简介-什么是admin?
Admin是django自带的一个功能强大的自动化数据管理界面;被授权的用户可直接在admin中管理数据库;django提供了许多针对的定制功能
1、创建用户:python manage.py createsuperuser 创建超级用户
2、创建好用户之后开启runserver服务,然后执行127.0.0.1:8000/admin 可进入账户登录界面;页面一般显示是英文,可修改setting.py文件中LANGUAGE_CODE='zh_Hans',(‘zh-hans’,'zh_hans',‘zh-Hans’都可以)即可显示为中文。LANGUAGE_CODE='en-us'代表是英文
admin应用配置:
在应用下admin.py中引入自身的models模块(或里面的模型类),然后编辑admin.py:admin.site.register(models.Article)
上面编辑操作完成后,刷新前面在浏览器登录的后台就能看见站点管理,以及里面包含得有我们创建的django应用APP和APP下面的模型类(models.py里面的类),这些东西就是我们的数据了。如何修改数据呢,请看下面图:
我们点击Article超链进去添加一条条数据,显示的目录都是一样的名字,这是python默认的实例对象,这样无法区别哪个才是我们想要的,那么如何修改这个默认名称呢,请看下面:
1、在models.py中的Article类里面添加一个方法,python3版本选择添加__str__(self)方法,然后return self.title;这样之后在到浏览器中去查看,目录的名称就分别显示为我们添加数据时手动写的标题了。
admin增强内容:(除了显示标题外,还显示其他字段信息)
list_display括号里面的字段必须是models.py里面的类里面的字段名,且需要是字符串。
admin过滤器:
关于admin后台的操作的代码编写基本都是在admin.py文件中去写入。
上面的几个截图代码演示:
from django.contrib import admin
from blog.models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'content',)
list_filter = ('pub_time') # 过滤器
admin.site.register(Article) # 就是将模型类注册进去
四、一个简单博客页面设计
一般博客页面概要包含:1.博客主页面(首页);2、博客文章内容;3、博客撰写页面(写博客)
1.博客主页面包含:文章标题列表(加超链接);发表博客按钮(超链接点击),这个列表的编写思路如下:
取出数据库中所有文章对象>将文章对象们打包成列表(实际是使用all()函数获取所有数据,得到是一个python的集合,这里说的打包列表非python的list里面。all()函数见下图),传递到前端>前端页面把文章以标题超链接的形式逐个列出。
操作步骤:
就是先再该应用APP下的views.py文件中修改函数获取数据库中所有信息,然后传递到前端(即return到templates模板中的html文件里)。
到这里就完成了博客主页面的开发
2、一篇博客文章内容包含:标题;文章内容;修改文章按钮(超链接形式点击)操作思路及步骤可以如下:
在views.py中再创建一个响应函数,并引入配置到urls.py中,还要创建一个html文档;这里需要注意的是:创建的响应函数中有个参数是文章的主键id(这个id在浏览器中我们写入到URL后面就能跳转到指定文章页面),URL参数传递;参数在views.py中响应函数request后,可以有默认值,URL正则表达式:r'^article_page/(?P<article_id>[0-9]+)/$';URL正则中的组名(即article_id)必须和响应函数中的参数名一致。
1)Django模板中超链配置,如下图介绍:
3、博客撰写页面(写博客),包含:标题编辑栏;文章内容编辑区域;提交按钮(举例:就如现在写的这个博客方式)
其实步骤和前面那些都是一样的,先再views.py中创建响应函数,并引入到urls.py中,同时渲染到新建的模板html里面。
实际就是提交一个form表单数据,这里就学习到了Django中的form表单。(注释:所有的form表单提交都需要加:{% csrf_token %}防护机制);另外也可以通过编写views.py文件,直接默认给数据表添加信息:
如何将网页输入的数据添加入数据库(有两种方式):
第一种,此方式没添加一条会覆盖前面的数据,不好用
第二种添加数据的方式,每写一条就会增加一条,不会覆盖前面的数据:
if request.method == 'POST':
name = request.POST.get('name', '') # 获取从网页输入的name
email = request.POST.get('email', '') # 获取从网页输入的email
address = request.POST.get('address', '') # 获取从网页输入的address
message = request.POST.get('message', '') # 获取从网页输入的message
UserMessage.objects.create(name=name, email=email,address=address, message=message, object_id='1')
return render(request, 'new_form.html')
上面演示了如何添加数据记录,那么删除某数据怎么操作呢?情况下面截图:
-
单表操作
表记录的增
models.Publisher.objects.create(name="沙河出版社")
表记录的改
方式一:
b=Book.objects.get(author="oldboy") b.price=120 b.save() 方式二:
#update是QuerySet Book.objects.filter(author="yuan").update(price=999)
book_list = Book.objects.filter(id=2) book_list=Book.objects.exclude(author="yuan").values("name","price") book_list=Book.objects.all() book_list = Book.objects.all()[::2] book_list = Book.objects.all()[::-1] #first,last,get取到的是一个实例对象,并非一个QuerySet的集合对象 book_list = Book.objects.first() book_list = Book.objects.last() book_list = Book.objects.get(id=2)#只能取出一条记录时才不报错 ret1=Book.objects.filter(author="oldboy").values("name") ret2=Book.objects.filter(author="yuan").values_list("name","price") book_list= Book.objects.all().values("name").distinct() book_count= Book.objects.all().values("name").distinct().count()
models.Publisher.object.get(id=1).delete()
Book.objects.filter(author="oldboy").delete()
-
模糊查询 双下划线__
book_list=Book.objects.filter(name__icontains="P").values_list("name","price")
book_list=Book.objects.filter(id__gt=5).values_list("name","price")
安装virtualenv:pip install virtualenv (virtualenv作用)
pip install workon
pip install virtualenvwrapper-win(安装这个之后才能使用workon命令)
>mkvirtualenv +自定义目录名称:创建虚拟环境,位置统一在C盘C:\Users\Administrator\Envs下面
workon可以查看有哪些虚拟环境
workon+虚拟环境目录名称:即可进入指定django虚拟环境
安装django指定版本:pip install Django==1.11
windows查看django版本命令:python -m django --version
安装django两种方式:
1)pip install django==1.11
2)源码安装,下载源码,然后执行:python setup.py install
用pycharm创建Django项目:打开pycharm>点击file>选择new project>选择Django>然后再Location 设置Django项目名称,下面选择django环境。创建完成之后执行下面操作(安装MySQL-Python驱动,因为我们会使用django连接mysql):pip install mysql-python,若报错,需下载支持python3的驱动文件,看下面:
Python3.6安装MySQL-Python驱动方式:1.到https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python下载对应文件 (Mysqlclient中查询),2.pip install mysqlclient-1.4.2-cp36-cp36m-win_amd64.whl安装
django数据库配置:DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdjango',
'USER': 'root',
'PASSWORD': 'yi15181710927',
'HOST': '127.0.0.1',
}
}
TEMPLATES配置:TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
静态文件配置:STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
create 创建的用户密码不加密 应该用create_user
from django.contrib.auth import get_user_model User = get_user_model()使用这种特殊方法调用用户model
ctrl+r html一键替换
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 创建midia目录 需要配置查找路径
MEDIA_URL = '/media/'