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)数据库-》模型类
数据库反向建立模型类:https://www.cnblogs.com/andy9468/p/8810071.html
 
(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)

 

posted @ 2018-04-10 23:00  安迪9468  阅读(179)  评论(0编辑  收藏  举报