01-开始使用django(全、简)
目录
(一)创建项目
1、生成django默认目录
2、创建应用目录
3、安装应用
4、配置使用mysql数据库
5、运行轻量级web服务器,预览
(二)设计模型
1.在models.py中定义模型类
2.迁移
3.通过类和对象完成数据crud
(三)后台管理(管理站点,编辑)
1.管理界面本地化
2.创建管理员
3.注册模型类
4.自定义管理页面
(四)视图和URL(控制器和调用方法)
1.定义视图
2.配置URLconf
(五)模板
1.定义模板
2.视图调用模板(简写)
可选项:创建虚拟环境
mkvirtualenv -p python3 bj11_py3
使用虚拟环境
workon bj11_py3
安装第三方包
pip install django==1.8.2
(一)创建项目
1、生成django默认目录
打开pycharm,点击File->New Project菜单,创建django目录结构
或者
python3 XXX/scripts/django-admin.exe startproject test1
2、创建应用目录
在pycharm的terminal终端
python manage.py startapp booktest
3、安装应用(注册应用)
在test1/settings.py中INSTALLED_APPS下添加应用的名称就可以完成安装,在元组中添加一个新的项,当前示例为booktest
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'booktest',
)
4、配置使用mysql数据库
django默认的数据库是slqite,需要修改为mysql数据库。
settings.py中修改配置为:
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME': "mydjangodb",
'HOST': 'localhost',
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'root',
}
}
先安装扩展包
pip install pymysql
为django的MySQLdb()方法,修改pymysql的数据操作方法起一个MySQLdb()别名
项目名称的主包下,__init__.py添加为
import pymysql
pymysql.install_as_MySQLdb()
如果之前有数据库,就把数据库模型考过来(放到models.py)。无需迁移操作。
5、运行轻量级web服务器,预览
python manage.py runserver 8000
或者
python manage.py runserver 127.0.0.1:8000
python manage.py runserver 0.0.0.0:8000 --insecure
(--insecure 参数用于解决关闭调试模式时,无法加载js、css的问题。参考)
然后在浏览器中输入网址“127.0.0.1:8000”
或者直接点击pycharm右上角的运行按钮
(二)设计模型
1.在models.py中定义模型类
from django.db import models
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()
def __str__(self):
return "%d" % self.pk
class HeroInfo(models.Model):
hname = models.CharField(max_length=20)
hgender = models.BooleanField()
hcontent = models.CharField(max_length=100)
hBook = models.ForeignKey('BookInfo')
def __str__(self):
return "%d" % self.pk
延伸:
(1)模型类-》数据库
(2)数据库-》模型类
(3)修改表名、修改字段名、打印显示名称
(4)为模型类添加方法(推荐到模型类的管理器中直接添加方法)
2.迁移
迁移前,要手动创建数据库。
迁移由两步完成
(1)生成迁移文件:根据模型类生成创建表的sql语句
python manage.py makemigrations
(2)执行迁移:根据第一步生成的sql语句在数据库中创建表
python manage.py migrate
如果有警告,可以关闭:https://www.cnblogs.com/xb88/p/8057987.html
3.通过类和对象完成数据crud
延伸:导入默认数据
-- 1 insert into bookinfo(btitle,bpub_date,bread,bcommet,isDelete) values ('射雕英雄传','1980-5-1',12,34,0), ('天龙八部','1986-7-24',36,40,0), ('笑傲江湖','1995-12-24',20,80,0), ('雪山飞狐','1987-11-11',58,24,0); -- 2 insert into booktest_heroinfo(hname,hgender,hbook_id,hcontent,isDelete) values ('郭靖',1,1,'降龙十八掌',0), ('黄蓉',0,1,'打狗棍法',0), ('黄药师',1,1,'弹指神通',0), ('欧阳锋',1,1,'蛤蟆功',0), ('梅超风',0,1,'九阴白骨爪',0), ('乔峰',1,2,'降龙十八掌',0), ('段誉',1,2,'六脉神剑',0), ('虚竹',1,2,'天山六阳掌',0), ('王语嫣',0,2,'神仙姐姐',0), ('令狐冲',1,3,'独孤九剑',0), ('任盈盈',0,3,'弹琴',0), ('岳不群',1,3,'华山剑法',0), ('东方不败',0,3,'葵花宝典',0), ('胡斐',1,4,'胡家刀法',0), ('苗若兰',0,4,'黄衣',0), ('程灵素',0,4,'医术',0), ('袁紫衣',0,4,'六合拳',0);
(三)后台管理(管理站点,编辑)
1.管理界面本地化
打开test1/settings.py文件,找到语言编码、时区的设置项,将内容改为如下
LANGUAGE_CODE = 'zh-Hans' # 设置汉语显示 TIME_ZONE = 'Asia/Shanghai' # 设置具体时区,配合USE_TZ使用 USE_I18N = True USE_L10N = True USE_TZ = False # 使用非美国时区
2.创建管理员
在Terminal中执行如下命令,用于创建管理员
python manage.py createsuperuser
根据提示创建超级用户python
打开浏览器,在地址栏中输入如下地址后回车
输入前面创建的用户名、密码完成登录
3.注册模型类
登录后台管理后,默认没有我们创建的应用中定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并进行crud操作
打开booktest/admin.py文件,编写如下代码
from django.contrib import admin
from .models import BookInfo,HeroInfo
admin.site.register(BookInfo)
admin.site.register(HeroInfo)
到浏览器中刷新页面,可以看到模型类BookInfo和HeroInfo的管理了
说明:
点引用方案: from .models import BookInfo,HeroInfo 中 .models的含意:同级目录用点.
项目等效方案:from booktest.models import BookInfo,HeroInfo 中 booktest.models的含义是:从项目的入口文件(manage.py)所在目录开始找。
4.自定义管理页面
打开booktest/admin.py文件,自定义类,继承自admin.ModelAdmin类
属性list_display表示要显示哪些属性
class BookInfoAdmin(admin.ModelAdmin):
list_display = ['pk', 'btitle', 'bpub_date']
修改模型类BookInfo的注册代码如下
admin.site.register(BookInfo, BookInfoAdmin)
最终booktest/admin.py文件代码如下
from django.contrib import admin from .models import BookInfo, HeroInfo class BookInfoAdmin(admin.ModelAdmin): list_display = ['pk', 'btitle', 'bpub_date'] class HeroInfoAdmin(admin.ModelAdmin): list_display = ['pk', 'hname', 'hgender', 'hcontent'] admin.site.register(BookInfo, BookInfoAdmin) admin.site.register(HeroInfo, HeroInfoAdmin)
说明:数据修改功能为,进入admin管理页面,打开表格,点击每一行中有超链接的字段数据,就可修改。一般该字段为id字段。
(四)视图和URL(控制器和调用方法)
1.定义视图views.py
打开booktest/views.py文件,定义视图index如下
#coding:utf-8 from django.http import HttpResponse def index(request): return HttpResponse("index")
2.配置URLconf
(1)在test1/urls.py文件,为urlpatterns列表增加项如下
url(r'^', include('booktest.urls')),
(2)在booktest/应用下创建urls.py文件,定义代码如下
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index), ]
拓展:r的作用
url(r'^detail\d+/$', views.index)
或者
url('^detail\\d+/$', views.index)
原因是
python将\视为转义
正则也将\视为转义
视图和URLconf都定义好了,接下来在浏览器地址栏中输入网址
http://127.0.0.1:8000/
(五)模板
1.定义模板
打开test1/templates/booktest/index.html文件,定义代码如下
(1)模板变量:在模板中输出变量语法如下,变量可能是从视图中传递过来的,也可能是在模板中定义的
{{变量名}}
(2)模板标签:在模板中编写代码段语法如下
{%代码段%}
1)例一:循环
<ul> {% for i in list %} <li>{{ i }}</li> {% endfor %} </ul>
(3)模板中注释
①单行注释
{# 注释内容 #}
②多行注释:
{% comment %}
注释内容1
注释内容2
{% endcomment %}
定义模板内容如下
<html>
<head>
<title>图书列表</title>
</head>
<body>
<h1>{{title}}</h1>
{%for i in list%}
{{i}}
{%endfor%}
</body>
</html>
设置查找模板的路径:打开test1/settings.py文件,设置TEMPLATES的DIRS值
'DIRS': [os.path.join(BASE_DIR, 'templates')],
2.视图向模板传送数据
打开booktest/views.py文件,调用render的代码如下
#coding:utf-8
from django.shortcuts import render
def index(request):
context={'title':'图书列表','list':range(10)}
return render(request,'booktest/index.html',context) # 渲染到模板
小结:HttpResponse和render
HttpResponse覆盖原有页面,输出内容,如:
return HttpResponse("show1 i am %s" % id)
render将数据从视图传送到模板页面,如:
context={'title':'图书列表','list':range(10)}
return render(request,'booktest/index.html',context)