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 3.templates(存放html文件) 4.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' %} 复制代码
五、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 复制代码
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)
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 复制代码