zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Mysql数学函数不求人数据库专栏,MySQL
    下班以后就不要开电脑了,
    在ubuntu下用eclipsecdt调试memcached C language ITeye论坛
    mperham/sidekiq
    Reference C++ Reference
    请问一下哪有机械键盘的实体店可以体验一下? 外设 Chiphell 分享与交流用户体验的最佳平台 Powered by Discuz!
    Linux的cron和crontab iTech 博客园
    MIUI官方论坛 发烧友必刷的Android ROM
    机器学习视频
    crossover 海客谈, 季小军, 义乌人
  • 原文地址:https://www.cnblogs.com/tyl23/p/11809462.html
Copyright © 2011-2022 走看看