笔记一   10课

1.视图中的变量在html中展示

    A.在视图中定义youPorn变量以及info_data字典
    def index(request):
        name_info = {
            'name':'SanJin',
            'age': 21,
            'hobbie': "show",
            'job': "stripper"
        }
         #return render(request,'index.html',{'your':"gaoguodeng learn python"})
        return render(request, 'index.html', {
            'youPorn': "SanJin Is on the show now!",
            'info_data': name_info
        })

    B. 在html文件中引用。双大括号里面带变量名即可,如: `info_data`  `youPorn`


2.django 的if 判断
        {% if k == "job" %}
             {{ k }}::{{ v }}
        {% else %}
             {{ k }}::{{ v }}
        {% endif %}


3. django 的for 循环,也就是在{%  python命令 %}
    如:
    {% for k,v in info_data.items %}
        
  •  {{ k }}::{{ v }}
  •     {% endfor %} 4.django 应用模版     A.在你的html中引用你想引用的html文件。这是全部被引用(继承)     {% extends 'index.html' %}     B.在你的html文件中引用你想应用的html文件,但是html文件中有部分内容不希望被引用或想被替换(部分引用或部分继承,和部分替换。)       B1.在希望引用的html文件模版中,用下面内容把你不希望被引用或想被替换的内容扩起来。         {% block page-contont %}         ...         ... {这里面的就是你不想被引用的内容或想替换的内容}         ...         {% endblock %}         B2.如果你想替换的上面内容,那就需要用下面命令             {% extends 'index.html' %}             {% block page-contont %}             这里编写你希望替换后的内容(如果不写内容,即替换为空的,也就是不引用上面这里部分内容)             {% endblock %}



    笔记二    11课

     
    
    一.添加静态资源目录
        STATIC_URL = '/static/'
        STATICFILES_DIRS =[
            os.path.join(BASE_DIR,'statics'),
        ]
    
    二.学习django request 对象
    http://python.usyiyi.cn/django/ref/request-response.html
    
    
    三.动态获取url匹配
    
        1.在urls.py中的url匹配条目中加入name='xxx' 变量
        如下面的首页,在后面加: name='index'
        urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^$', views.index,name='index'),
        url(r'^host/$', views.host, name='host'),
        url(r'^asset/$', views.asset, name='asset'),
        url(r'^audit/$', views.audit, name='audit'),
    ]
    
        2.在对应的html文件中直接应用url条目的变量即可。
          index.html文件中的用法,如下
    
          
            
  • 首页
  •         
  • 主机
  •         
  • 资产
  •         
  • 审计
  •                上面的首页,本应该写为:         
  • 主机
  •         现在仅仅用{% url 'host' %}即可代替,日后哪url中的host条目改变了,         这里的html用不需要改变 三.django中models中可选的参数     system_type_choices = {         ('linux',"LINUX"),         ('win',"Windows"),     }     system_type = models.CharField(max_length=32,choices=system_type_choices) 1.导入模版 {% extends 'index.html' %} {% block left-sidebar %} aaa {% endblock %} {% block right-sidebar %}

    host

    {% endblock %} 2.django获取访问的路径      {{ request.path }} 3.切换导航栏高亮             $(document).ready(function () {             $("#navbar a[href='{{ request.path }}']").parent().addClass("active");         })     4.url 别名url   name 的值不变,无论前面的正则如何改变,在页面中调用url也不用改 urlpatterns = [     url(r'^admin/', include(admin.site.urls)),     url(r'^$', views.index),     url(r'^host/$', views.host,name='host'),     url(r'^asset/$', views.asset,name='asset'),     url(r'^audit/$', views.audit,name='audit'), ]                        
  • 首页
  •             
  • 主机
  •             
  • 资产
  •             
  • 审计
  •            5.     模型class    --->   表     字段(属性)    --->   列     方法         --->   操作数据库 6.重写django的用户 from django.contrib.auth.models import User    ##导入django自带的用户表     class UserProfile(models.Model):         user = models.OneToOneField(User) ## 这里用的是一对一关心,把这里的用户关联到django自带的用户         name = models.CharField(max_length=64,unique=True)         ##下面的就是扩展的字段         host_groups = models.ManyToManyField('HostGroup',blank=True,null=True) ##用户可以不属于任何一个组         hosts = models.ManyToManyField('Host',blank=True,null=True)  ##用户可以不属于任何一个主机         def __unicode__(self):             return self.name 7.django使用mysql数据库  第一步:在mysql数据库中数据对于的库:  create database django01 character set utf8;  第二步:在setting 配置文件中引用这个数据库 DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',  # 设置为mysql数据库         'NAME': 'django01',  # mysql数据库名         'USER': 'root',  # mysql用户名,留空则默认为当前linux用户名         'PASSWORD': 'wdzj@2015',  # mysql密码         'HOST': '140.206.51.154',  # 留空默认为localhost         'PORT': '1205',  # 留空默认为3306端口     } } 现在Django知道要包含polls应用。 让我们运行另外一个命令: python manage.py makemigrations polls python manage.py sqlmigrate polls 0001 运行python manage.py makemigrations ,为这些修改创建迁移文件 运行python manage.py migrate ,将这些改变更新到数据库中。 desc app01_host;   #查看app01_host 的表结构 show create table app01_host;  ##查看创建app01_host表语句 ########### 8.相关表说名 mysql> show tables; +-------------------------------+ | Tables_in_django1             | +-------------------------------+ | app01_host                    | | app01_host_groups             |   //这个表是app01_host和app01_hostgroup之间的关联表 | app01_hostgroup               | | app01_idc                     | | app01_userprofile             | | app01_userprofile_host_groups |   // 这个也是关联变 | app01_userprofile_hosts       | | auth_group                    | | auth_group_permissions        | | auth_permission               | | auth_user                     | | auth_user_groups              | | auth_user_user_permissions    | | django_admin_log              | | django_content_type           | | django_migrations             | | django_session                | +-------------------------------+ 17 rows in set (0.01 sec) 上面的表中,app01是应用的名称,在models中的每个类都会生成一个相应的表,表名就是 应用名称加上_类名,如上面的app01_host表,以及一些关联表,如app01_host_groups django表之间的关联就是通过中间的一个关联表进行关联的 9.把models.py中创建的表,在web中显示出来    在app01/admin.py 中增加下面内容     import  models     from django.contrib import admin     admin.site.register(models.Host)     admin.site.register(models.HostGroup)     admin.site.register(models.IDC)     admin.site.register(models.UserProfile)     admin.site.register(models.IDC) 10.进入django的管理后台     http://0.0.0.0:8000/admin/ 11.创建一个django后台超级用户 python manage.py createsuperuser Lvnian:s10day11_1 root# python manage.py createsuperuser System check identified some issues: WARNINGS: app01.UserProfile.host_groups: (fields.W340) null has no effect on ManyToManyField. app01.UserProfile.hosts: (fields.W340) null has no effect on ManyToManyField. Username (leave blank to use 'root'): root Email address: Password: Password (again): Superuser created successfully. Lvnian:s10day11_1 root# 9.     def __unicode__(self):         return self.name 10.跨越{% csrf_token %}     当你用post方法提交表单内容时,需要{% csrf_token %}这个             {% csrf_token %}                                  
                                     
                                          
    //   这个value就是令牌     print request.POST ##得到的内容 11.创建一条hosts记录: >>> models.Host.objects.create( ... hostname='gaogdtest', ... ip_addr='10.0.0.112', ... port = 34, ... system_type='linux', ... idc_id = 1 ,   ## 这个本应该是 idc = models.m ... online_date=datetime.datetime.now(), ... ) /Library/Python/2.7/site-packages/django/db/models/fields/__init__.py:1430: RuntimeWarning: DateTimeField Host.online_date received a naive datetime (2016-09-29 00:00:14.418823) while time zone support is active.   RuntimeWarning) >>> idc的正常关联方法 >>> models.Host.objects.create( ... hostname='gaogdtest01', ... ip_addr='10.0.10.112', ... port = 23, ... system_type='linux', ... idc = models.IDC.objects.get(id=1), ... online_date=datetime.datetime.now(), ... ) /Library/Python/2.7/site-packages/django/db/models/fields/__init__.py:1430: RuntimeWarning: DateTimeField Host.online_date received a naive datetime (2016-09-29 00:05:03.826884) while time zone support is active.   RuntimeWarning) >>> 批量给主机添加组:h.groups.add(*[i.id for i in all_groups]) >>> all_groups=models.HostGroup.objects.all() >>> [i.id for i in all_groups] [1L, 2L] >>> h=models.Host.objects.get(id=1) >>> h.groups.add(*[i.id for i in all_groups]) >>> >>> h.groups.remove( for i in all_groups]) ###创建host条目的另外一种方法 h=models.Host( hostname='gaogdtest02', ip_addr='10.0.10.13', port = 23, system_type='linux', idc = models.IDC.objects.get(id=1), online_date=datetime.datetime.now(), ) h.save() h.id >>> h=models.Host( ... hostname='gaogdtest02', ... ip_addr='10.0.10.13', ... port = 23, ... system_type='linux', ... idc = models.IDC.objects.get(id=1), ... online_date=datetime.datetime.now(), ... ) >>> >>> h.save() /Library/Python/2.7/site-packages/django/db/models/fields/__init__.py:1430: RuntimeWarning: DateTimeField Host.online_date received a naive datetime (2016-09-29 00:22:24.872968) while time zone support is active.   RuntimeWarning) >>> h.id 5L >>> h.groups.add(*[i.id for i in all_groups]) >>> 12.修改hostname >>> h.hostname 'gaogdtest02' >>> h.hostname='gaogd02' >>> h.save() >>> 批量修改port >>> models.Host.objects.filter().update(port=22) 5L >>> 删除 h.delete() 13.调用django的认证系统 from  django.contrib.auth import authenticate 14.验证用户是否登陆:         {% if request.user.is_authenticated  %}             {{ request.user }}         {% else %}             登录         {% endif %} {{ request.user.userprofile.name }}  //显示全名 {{ request.user }}   //显示用户名 15.多表查询      {{ request.user.userprofile.hosts.select_related }}     // 通过用户,找到主机。注意登陆用户必须要有相关的主机才有内容出来      循环这个组     {% for group in request.user.userprofile.host_groups.select_related %}         {{ group.name }}     {% endfor %}     循环这个组,找到每个组里面的主机     {% for group in request.user.userprofile.host_groups.select_related %}         
  •             {{ group.name }}         
  •         {{ group.host_set.select_related }}     {% endfor %}      这个asset的内容     {{ request.user.userprofile.hosts.select_related }}     
          {% for group in request.user.userprofile.host_groups.select_related %}         
    •             {{ group.name }}         
    •             
                        {% for host in group.host_set.select_related  %}                 
      •                     {{ host.hostname }} --->{{ host.ip_addr }}                 
      •                 {% endfor %}             
          {% endfor %}     
        #############     []     db         ubuntu --->192.168.10.11         AlexTest --->10.0.0.5     web集群         windows --->192.168.10.12         localhost --->192.168.9.33         AlexTest --->10.0.0.5         gaogd --->10.0.0.6 16.用户登陆     from  django.contrib.auth import authenticate,login,logout     login(request,user)     ##这才是真正的登陆 17.用户退出     from  django.contrib.auth import authenticate,login,logout     logout(request) 18.判断如果用户没有登陆就不让访问     a.导入模版     from django.contrib.auth.decorators import login_required     b.在每个需要认证页面的views 的函数前加入@login_required     如:     @login_required     def host(request)         return render(request,'host.html') 19.models.py 说明:     #!/usr/bin/python     # -*- coding: utf-8 -*-     __author__ = 'gaogd'     from django.contrib.auth.models import User     from django.db import models     # Create your models here.     class Host(models.Model):         hostname = models.CharField(max_length=64,unique=True)         ip_addr = models.GenericIPAddressField(unique=True)         port =  models.IntegerField(default=22)         system_type_choices = {             ('linux',"LINUX"),             ('win',"Windows"),         }         system_type = models.CharField(max_length=32,choices=system_type_choices)   ##这是一个选择框,选择的内容是system_type_choices中定义的         idc = models.ForeignKey('IDC')    ##一对多关心。每创建一个主机,必须关联到一个IDC机房,同时,如果创建一个idc机房的时候,可以选择多台主机         groups = models.ManyToManyField('HostGroup')  ##这里的多对多,是说明创建主机的时候,你可以选择多个组,同时,创建一个组的时候,可以选择多个主机         enabled = models.BooleanField(default=True)     ##判断主机是否上线(上线,下线),默认上线         online_date = models.DateTimeField()##什么时候上线的         create_date = models.DateTimeField(auto_now_add=True)##什么时候创建or添加这台服务器的,auto_now_add=True代表不用我写具体什么时候创建的,在创建这台服务器的时候,他自动生成         def __unicode__(self):             return self.hostname     class IDC(models.Model):         name = models.CharField(max_length=64, unique=True)         def __unicode__(self):             return self.name     class HostGroup(models.Model):         name = models.CharField(max_length=64,unique=True)         def __unicode__(self):             return self.name     class UserProfile(models.Model):         user = models.OneToOneField(User) ## 这里用的是一对一关心,把这里的用户关联到django自带的用户         name = models.CharField(max_length=64,unique=True)         host_groups = models.ManyToManyField('HostGroup',blank=True,null=True) ##用户可以不属于任何一个组         hosts = models.ManyToManyField('Host',blank=True,null=True)  ##用户可以不属于任何一个主机         def __unicode__(self):             return self.name // 作业,在资产页面,做一个功能,可以增删改查


    笔记三 12 课

    1,应用django的用户
    from django.contrib.auth.models import User
    class UserProfile(models.Model):
        user = models.OneToOneField(User)
    
    2.自关联需要家 related_name='xxx'
       parent_comment = models.ForeignKey('Comment',blank=True,null=True,related_name='pid')
    
    
    3.应用表在admin页面
    在 app/admin.py 中编写下面内容
        from  django.contrib import  admin
    
        import  models
    
        admin.site.register(models.Article)
        admin.site.register(models.Gategory)
        admin.site.register(models.ThumbUp)
        admin.site.register(models.Comment)
        admin.site.register(models.UserProfile)
        admin.site.register(models.UserGroups)
    
    4.创建超级用户
        Type 'manage.py help' for usage.
        Lvnian:s10day12bbs root# python manage.py  createsuperuser
        Username (leave blank to use 'root'):
        Email address:
        Password:
        Password (again):
        Superuser created successfully.
        Lvnian:s10day12bbs root#
    
    
    5.获取文章
        ######views.py
        def index(request):
    
        articles = models.Article.objects.all().order_by('-publish_date')
    
        return render(request,'index.html',{
            'articles': articles
        })
    
        ######index.html
    
        {% for article in articles %}
            {{ article }}
            
        {% endfor %} 6.boostrap 中让div换行,用row