Django 基础知识
一, Django 的优势
Python 的 web 框架有 Django,Tornado,Flask 等多种, Django 相较与其他 Web 框架其优势为: 大而全, 框架本身集成了 ORM, 模型绑定, 模板引擎, 缓存, Session 等诸多功能
二, DJango 项目的创建
1. 命令行
- django-admin startproject sitename # 建项目
- python manage.py runserver 0.0.0.0 # 启动服务
- python manage.py startapp appname # 创建 App
- python manage.py syncdb # 建表是的编码是 utf8(后面的版本取消)
- python manage.py makemigrations # 连接库
- python manage.py migrate # 建表
- python manage.py createsuperuser # 创建 admin 用户
三, Django 的目录结构
1. 同项目名称一样的目录, 是做全局变量的: setting(配置文件, 路径配置等),urls(路由系统),wsgi(socket)
2.App 文件: App,models,views,admin,tests
- templates(存放 html 文件)
- manage(进入 Django 命令行模式)
以下是自定义: log(存放日志),media(存放视频, 照片),static(存放 JS,CSS, 静态图片..)
四, 连接数据库
注: 新建的数据库要指定 utf8 格式, 否则在建表时 (有中文输入) 会出现乱码
步骤: setting 配置数据库, 连接数据库, 建表
1,setting 配置 DATABASES
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME':'dbname',
- 'USER': 'root',
- 'PASSWORD': 'xxx',
- 'HOST': '',
- 'PORT': '',
- }
- }
2, 由于 Django 内部连接 MySQL 时使用的是 MySQLdb 模块, 而 python3 中还无此模块, 所以需要使用 pymysql 来代替
- # 如下设置放置的与 project 同名的配置的 __init__.py 文件中
- import pymysql
- pymysql.install_as_MySQLdb()
3, 在 setting 配置模版文件路径(把 HTML 存放在 templates)-- 默认已配置好
- TEMPLATE_DIRS = (
- os.path.join(BASE_DIR,'templates'),
- )
4, 在 setting 配置静态文件路径(把 CSS,JS 存放在 statics)
注: 在生产环境下(DEBUG=False), 该配置失效
- STATICFILES_DIRS = (
- os.path.join(BASE_DIR,'static'),
- )
注: 在 HTML 里应用静态文件, 建议使用模板语言
1)在 HTML 开头添加
{% load staticfiles %}
2)应用静态文件
{% static 'css/reset.css' %}
View Code
五, ORM
1-1 查询 API:
- filter(**kwargs) # 它包含了与所给筛选条件相匹配的对象
- all() # 查询所有结果
- get(**kwargs) # 返回与所给筛选条件相匹配的对象, 返回的结果有且只有一个, 超过则报错
- values(*field) # 返回一个 valueQuerySet, 一个特殊 QuerySet(对象集合), 返回结果是
一个可迭代的字典序列
- exclude(**kwargs) # 它包含了与所给筛选条件不匹配的对象
- order_by(*field) # 对查询结果进行排序
- reverse() # 对查询结果进行反向排序
- distinct() # 从返回结果中剔除重复记录
- count() # 返回数据库中匹配查询 (QuerySet) 的对象数量
- first() # 返回第一条记录
- last() # 返回最后一条记录
- exists() # 如果 QuerySet 包含数据, 就返回 True, 否则返回 False
View Code
1-2 双下划线查询
- model.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取 id 大于 1 且 小于 10 的值
- model.Tb1.objects.filter(id__in[11, 22, 33]) # 获取 id 等于 11,22,33 的数据
- model.Tb1.objects.exclude(id__lt=10, id__gt=1)# 获取 id 不等于 11,22,33 的数据
- model.Tb1.objects.filter(name_contains='ven') # 获取 name 值包含 ven(区分大小写)
- model.Tb1.objects.filter(name_icontains='ven') # 获取 name 值包含 ven(不区分大小写)
- model.Tb1.objects.filter(id__range=[1, 3]) # 获取 id 在区间 1~3 中的值(范围 bettwen and)
- View Code
1-3 多表操作(多对多):
创建多对多的关系 author = models.ManyToManyFiled("Author")
书籍对象它的所有关联作者 obj = book_obj.authors.all()
绑定多对多关系 obj.add(*QuerySet) 参数: 一条或者多条(前面加 *)
解除多对多关系 obj.remove(author_obj)
惰性机制
所谓惰性机制: Publisher.objects.all()或者. filter()等都只是返回了一个 QuerySet(查询结果集对象),
它并不会马上执行 sql 语句, 而是当调用 QuerySet 的时候才执行.
六, 后台管理(Django admin 和 xadmin)--- 一般用 xadmin, 功能更强大, 智能的管理系统
特点:
权限管理
少前端样式
快速开发
1, 设置网站为中文显示(zh-hans,Asia/Shanghai,USE_TZ=False) # USE_TZ 管理写入数据库的时区时间
2, 管理 user 用户表
1)设置 App 的 admin.py
- =================================================
- from .models import UserProfile
- class UserProfileAdmin(admin.ModelAdmin):
- pass
- admin.site.register(UserProfile,UserProfileAdmin)
- =================================================
另外一个后台管理构架 --xadmin
1, 安装
1)pip install xadmin
2)源码安装(推荐使用), 用 GitHub
依赖包: pip3 install future;pip3 install django-crispy_forms;
3)在 setting 中的 applist 加上
- 'xadmin',
- 'crispy_forms',
4) 修改 url, 把 admin ==> xadmin
5) 生成 xadmin 数据表
2,xadmin 用法 --App 的 model 注册
1)在每个 App 文件夹里新建 py 文件: adminx.py
- 2)
- import xadmin
- from .models import UserProfile,EmailVerifyRecord,Banner
- class EmailVerifyRecordAdmin(object):
- list_display = ['email','code','send_type','send_time'] # 展示出来的列
- search_fields = ['email','code','send_type'] # 搜索栏
- list_filter = ['email','code','send_type','send_time'] # 过滤器
- ordering = ['-click_nums'] # 排序
- readonly_fields = ['fav_nums'] # 设置只读
- exclude = ['click_nums'] # 不可见, 与 readonly_fields 有冲突, 同一列数据不可同时存在这两个字段里
- xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin) # 与 admin 关联
3)注:
当有外键时:
list_filter = ['user__username','fav_id','fav_type','add_time'] # 过滤器有所变量, 用双下划线
3,xadmin 后台管理页面设置(在 user 的 App 设置)
1)主题设置
- ==============================================
- from xadmin import views
- class BaseSetting(object):
- enable_themes = True # 显示主题
- use_bootswatch = True # 能使用那些主题
- xadmin.site.register(views.BaseAdminView,BaseSetting)
- ==============================================
2)网站标题和页尾标题, model 显示样式
- ==============================================
- from xadmin import views
- class GlobalSetting(object):
- site_title = "腾飞后台管理系统"
- site_footer = "腾飞学习网"
- menu_style = "accordion"
- xadmin.site.register(views.CommAdminView,GlobalSetting)
- ==============================================
3)model 显示的 App 名, 如何改为中文名
a. 在 apps.py 修改
在类中增加 verbose_name = u"用户操作"
b. 在__init__.py 文件增加
default_app_config = "users.apps.Usersconfig" # Usersconfig : 类名 + config
View Code
来源: http://www.bubuko.com/infodetail-3276100.html