linux下使用django创建项目基本流程
django使用MVT框架,与常见的MVC有所不同。
M,model,负责与数据库交互
V,view,核心,负责接收请求、获取数据、返回结果
T,template,负责呈现内容到浏览器
整个开发流程大致有这么几步:
*环境搭建
*定义模型
*使用后台管理
*编写视图
*定义模板
step1:创建虚拟环境
一般开发项目,为了便于后期的迁移,先要创建一个新的虚拟环境,可以在全新和独立的条件下开发整个项目。
创建名为 h1 的虚拟环境:
mkvirtualenv h1
使用时,
workon h1
即可。
创建基于python3.5,名为my_django的虚拟环境:
mkvirtualenv -p /usr/bin/python3.5 my_django
常用命令:
workon :工作在虚拟环境下
mkvirtualenv :创建虚拟环境
rmvirtualenv :删除虚拟环境
deactivate :退出虚拟环境
pip list :查看当前虚拟环境安装的python包
pip install :安装python相关的包
pip freeze :将当前虚拟环境安装的python包和版本号格式化输出
step2:安装django
pip install django
step3:创建项目
django-admin startproject my_django
step4:创建应用
python3 manage.py startapp sports
创建一个应用
一些细节上的操作:
- 别忘了去settings中注册应用!
- 改数据库为mysql,加上数据库名NAME、用户名、密码、HOST、端口3306
- 在TEMPLATES中写入DIRS模板目录
step5:设计模型
慎重慎重再慎重!!重要数据要有isDelete列,性别用bool类型
- 在models.py中定义模型类
from django.db import models class BookInfo(models.Model): ... class HeroInfo(models.Model): ... hero = models.ForeignKey('BookInfo')
- 在models中定义完模型类后,(这一步可以通过python3 manage.py inspectdb > sports/models.py来使用mysql数据库中已有的表自动生成模型类)
接着生成迁移文件,执行迁移:
python3 manage.py makemigrations
python3 manage.py migrate
- 执行完迁移后可以进shell中测试表数据的查询等操作。
python3 manage.py shell
- 导入模型类:
from sports.models import *
- 执行查询:
Y2015.objects.all() x = Y2015.objects.get(pk=20151000840) x.grade
- 可以在models中类加上__str__方法,调用x直接返回pk字段,但要注意返回的必须是string类型!
python3 manage.py runserver
如果虚拟机上运行服务器,然后想在主机上进入网页,会报错Invalid HTTP_HOST header
需要进入settings中修改
ALLOWED_HOSTS = ['*']
即可!!
- 后台管理
python3 manage.py createsuperuser
然后按要求设置用户名和密码
进入admin页面,登录,发现是英文,去settings中可以将'en-us'改成'zh-hans',使其显示为中文
要想在管理页面中看到我们的数据模型,需要注册模型类:
编辑admin.py,注册模型类
from django.contrib import admin from .models import * admin.site.register(Y2015)
- 自定义管理页面
Django提供了admin.ModelAdmin类,通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式
class Y2015Admin(admin.ModelAdmin): # 显示字段,可以点击列头排序 list_display = ['学号','年级','姓名','性别','身高','体重','BMI指数','肺活量','跑_50米','立定跳远','坐位体前屈','跑_800米','仰卧起坐','跑_1000米','引体向上','学年总分','附加分','等级评定'] # 过滤字段,过滤框在右侧 list_filter = ['年级','性别'] # 搜索字段,搜索框出现在顶部,支持模糊查询 search_fields = ['学号'] admin.site.register(Y2015, Y2015Admin)
- 表的名字Y2015在管理界面显示太难看怎么办?
class Y2015(models.Model): class Meta: verbose_name = '好看的名字' verbose_name_plural = '好看的名字'
- 应用的名字也可以修改,去init中设置,见图。
step6:定义视图
from django.http import * def index(request): return HttpResponse("hello world")
step7:配置url
定义完视图后,要配置路由,一般是先在根级的urls.py中配置各个应用urls的映射路径,再进入各自应用的urls中写好匹配规则。
# 应用中的urls
from django.conf.urls import url urlpatterns=[ url(r'^$',views.index) ]
step8:创建模板
为了让视图里返回的内容更丰富一些,使用模板,在项目的根目录下创建templates文件夹,然后再创建对应的应用文件夹,在其中创建index.html,
为了让views能使用模板,在views中引入模板模块:
from django.http import * from django.template import RequestContext,loader def index(request): temp = loader.get_template('booktest/index.html') # 加载模板 context = RequestContext(request, {}) return HttpResponse(temp.render(context)) # 解析、渲染内容
上面先加载再渲染的过程,可以简化为一步:
from django.shortcuts import render def index(request): return render(request,'booktest/index.html')
- 记住还要在settings中设置TEMPLATES中的DIRS路径为之前templates文件夹的路径,os.path.join(BASE_DIR,'templates')
返回结果的第三个参数,设置传入模板的上下文数据context:
from .models import * def index(request): bookList = BookInfo.objects.all() context = {'list':bookList} return render(request,'booktest/index.html',context)
然后就可以在index.html中输出title变量:{{title}}
也可以插入python代码:
{%for book in list%} <li>{{book.btitle}}</li> {%endfor%}