zoukankan      html  css  js  c++  java
  • django之表设计、路由层等

    图书管理系统表的设计

    from django.db import models
    
    # Create your models here.
    class Book(models.Model):
        title = models.CharField(max_length=32)
        # 总共八位 小数占两位
        price = models.DecimalField(
            max_digits=8,decimal_places=2)
    
        # 书和出版社是一对多的关系  外键字段键在多的一方
        publish = models.ForeignKey(to='Publish')  # to指定跟谁是外键关联的  默认关联的是表的主键字段
        """
        ForeignKey字段  django orm在创建表的时候 会自动给该字段添加_id后缀
        """
        # 书和作者是多对多的关系  外键字段建在任何一方都可以  但是 推荐你建在查询频率比较高的一方
        authors = models.ManyToManyField(to='Author')
        """authors字段仅仅是一个虚拟字段 不会再表中展示出来  仅仅是用来告诉django orm 书籍表和作者表示多对多的关系
            自动创建第三张表 
        """
    
    class Publish(models.Model):
        name = models.CharField(max_length=32)
        addr = models.CharField(max_length=255)
    
    
    class Author(models.Model):
        name = models.CharField(max_length=32)
        phone = models.BigIntegerField()
        # 一对一字段 建在哪张表都可以  但是推荐你建在 查询频率比较高的那张表
        author_detail = models.OneToOneField(to='AuthorDetail')
        """
            OneToOneField字段  django orm在创建表的时候 会自动给该字段添加_id后缀
    
            """
    
    class AuthorDetail(models.Model):
        addr = models.CharField(max_length=255)
        age = models.IntegerField()
    

    路由层

    urls.py  路由与视图函数对应关系  >>>     路由层
    
    无名分组与有名分组
    
    
    反向解析
        根据某一个东西 动态解析出一个结果 该结果可以直接访问对应的url
        
        url(r'^test_add/', views.testadd,name='xxx')
        
        前端解析
            {% url 'xxx' %}
        
        后端解析
            from django.shortcuts import render,HttpResponse,redirect,reverse
            url = reverse('xxx')
        
        
        无名分组反向解析
            url(r'^test_addsajdsjkahdkjasjkdh/(d+)/', views.testadd,name='xxx'),
            
            前端解析
                <a href="{% url 'xxx' 1 %}">222</a>
            
            后端解析
                url = reverse('xxx',args=(1,))
        
        有名分子反向解析
            url(r'^test_addsajdsjkahdkjasjkdh/(?P<year>d+)/', views.testadd,name='xxx'),
            前端解析
                <a href="{% url 'xxx' 1 %}">222</a>
                
                <a href="{% url 'xxx' year=1 %}">222</a>
            
            后端解析
                url = reverse('xxx',args=(1,))
                
                
                url = reverse('xxx',kwargs={'year':123})
        
    
            url(r'^edit_user/(d+)/',views.edit_user,name='edit')
    
            user_queryset = models.User.objects.all()
    
            {% for user_obj in user_queryset %}
                <td>
                    <a href="{% url 'edit' user_obj.pk %}">编辑</a>
                    <a>删除</a>
                </td>
            {% endfor %}
    
    
            def edit(request,edit_id):
                pass
        
        
        注意 反向解析的别名 一定不要重复 
    路由分发(******)
        
        django里面的app可以有自己的static文件,templates文件夹,urls.py(******)   
    
        项目名下面的urls.py不再做路由与视图函数对应关系
        而是做一个中转站  只负责将请求分发到不同的app中 
        然后在app的urls.py完成路由与视图函数的对应关系
     
        #方式一:
    
        from django.conf.urls import url,include
        from app01 import urls as app01_urls #起别名
        from app02 import urls as app02_urls
    
        url(r'^app01/',include(app01_urls)),
        url(r'^app02/',include(app02_urls))
    
        #方式二:(常用此方法)
    
        from django.conf.urls import url,include
        
        url(r'^app01/',include('app01.urls'))
        url(r'^app02/',include('app02.urls'))
        
        
        
    名称空间(了解)
        总路由
            url(r'^app01/',include('app01.urls',namespace='app01'))
            url(r'^app02/',include('app02.urls',namespace='app02'))
            
            print(reverse('app01:index'))
            print(reverse('app02:index'))
        
        
        通常情况下 起别名的时候 前面可以加上你的应用名
        
    

    伪静态

    将动态网页假装成是静态的

    这样做的目的是为了提高搜索引擎的SEO查询优先级

    搜索在收录网站的时候 会优先收录看上去像是静态文件的资源

    但是无论你怎么使用伪静态进行优化 你也干不过RMB玩家

    虚拟环境

    通常针对不同的项目 只会安装该项目所用的模块 用不到的一概不装

    不同的项目有专门的解释器环境与之对应

    每创建一个虚拟环境 就类似于重新下载了一个纯净的python解释器

    虚拟环境不要创建太多个

    django版本区别

    django1.x
    django2.x
    
    区别1:
        urls.py中1.x用的是url,而2.x用的是path
        并且2.x中的path第一个不支持正则表达式,写什么就匹配什么
        如果你觉得不好用,2.x里面还有re_path 这个re_path就是你1.x里面的url
  • 相关阅读:
    《复杂网络环境下访问控制技术》读书笔记(2)
    《复杂网络环境下访问控制技术》读书笔记(1)
    20199319《网络攻防实践》假期作业
    云班课实验补充
    20199319 缓冲区溢出漏洞试验
    20199319《Linux内核原理与分析》第十二周作业
    20199319《Linux内核原理与分析》第十一周作业
    图书管理系统UML建模
    《深入理解计算机系统(第三版)》第二章学习总结
    2019-2020-1 20199319《Linux内核原理与分析》第九周作业
  • 原文地址:https://www.cnblogs.com/michealjy/p/11723327.html
Copyright © 2011-2022 走看看