Django 框架设计
Django 与 Flask
Flask设计采用MVC设计模式
module view controller
Django设计采用MTV设计模式
module template view
两者都是当前比较流行的web框架,设计模式没啥区别,但是Django的封装更加完整,
可以轻松开发出企业级网站项目
Django的项目结构具体介绍
##命令行创建项目 Django-admin startproject Django_project
Django_project:
----manage.py 一个命令行工具,可以使用户使用多种方式对Django项目进行交互
----Django_project
----__init__.py 一个空文件,python的包
----settings.py 项目的配置文件
----urls.py 项目的URL声明
----wsgi.py 项目与WSGI兼容的WEB服务器入口
基本操作
配置数据库
更改默认数据库(默认数据库是SQlite)
在settings.py文件中,通过DATABASES选项进行数据库配置
配置MySQL
----python3安装pymysql
----__init__.py 文件中添加
import pymysql
pymysql.install_as_MySQLdb()
----setting.py
DATABASES={
'default':'django.db.backends.mysql',
'NAME':"数据库名称",
'USER':"用户名",
'PASSWORD':"密码",
'HOST':'IP',
'POST':'3306'
}
创建应用
##命令行创建项目 python manage.py startapp login
login
----admin.py 站点
----model.py 模型
----view.py 视图
##激活应用
在settings.py中文件中,将login应用加入到:
INSTALLED_APPS [login]
模型
定义模型
一个数据表格对应一个模型
注意:不需要定义主键,主键是自动添加的
生成数据表格
生成迁移文件 ## python manage.py makemigrations
执行迁移 ## python manage.py migrate 执行sql语句创建数据表
测试数据操作
进入到python shell环境 ## python manage.py shell
关联对象集合
进入到python shell环境 ## python manage.py shell
对象名.关联的类名的小写_set.all()
grade1.student_set.all()
grade1.student_set.creat(字段=值) #直接添加一条数据
启动服务器
## python manage.py runserver ip:port
ip可以不写默认是本机IP
端口默认是8000
Admin站点管理
内容发布:负责添加修改维护数据
在settings.py 文件中的INSTALLED_APPS 配置默认已经添加完成
创建管理员前操作:
python manage.py makemigrations
python manage.py migrate
创建管理员用户:执行python manage.py createsuperuser
依次输入用户名和密码
汉化:
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
注册
#admin.py
from .models import Grades,Students
admin.site.register(Grades)
admin.site.register(Students)
显示
class GrandsAdmin(admin.ModelAdmin):
#自定义管理页面
#列表页
list_display = ['pk','gname','gdate','ggirlnum','gboynum','isDelete']
list_filter = ['gname']
search_fields = ['gname']
list_per_page = 5
#添加和修改
#fields =['ggirlnum','gboynum','isDelete','gdate']
#分组不能同时使用
fieldsets = [
('num',{'fields':['ggirlnum','gboynum']}),
('base',{'fields':['gname','gdate','isDelete']}),
]
class StudentAdmin(admin.ModelAdmin):
def gender(self):
if self.sgender == True:
return "男"
else:
return "女"
gender.short_description = "性别"
def name(self):
return self.sname
name.short_description = "姓名"
def age(self):
return self.sage
age.short_description = "年龄"
def isidDelete(self):
if self.idDelete ==True:
return "已删除"
else:
return "使用中"
isidDelete.short_description = "是否删除"
list_display = ['pk',name, age, gender,
'scontend','sgrade',
isidDelete]
#list_filter = ['sname']
#search_fields = ['sname']
list_per_page = 5
#fields = ['sname', 'sgender', 'sage', 'idDelete']
#执行动作位置调整
actions_on_bottom = True
actions_on_top = False