Django简介

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' %}
复制代码
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
    2import 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

 

posted @ 2019-11-06 23:26  林卿  阅读(233)  评论(0编辑  收藏  举报