zoukankan      html  css  js  c++  java
  • Django基础知识

    Django基础知识

    数据的编辑与删除

    用户表的编辑功能实现
    
    1.首先去获取用户表的所有信息 
    url(r'^userlist/', views.userlistr) # 写入对应关系
    #获取所有对象信息
    def userlist(request):
        user_queryset = models.Userinfo.object.all() 拿到表里所有数据
        
    2.然后去写html文件.把用户的信息给展示出来.并在后面加上编辑和删除的按钮,给它们做成a标签,在跳转到指定的页面去处理.
    <table class="table table-hover table-bordered table-striped">
                    <thead>
                        <tr>
                            <th>主键名</th>
                            <th>用户名</th>
                            <th>密码</th>
                            <th class="text-center">操作</th> #加一个操作
                        </tr>
                    </thead>
                    <tbody>
                        {% for user_obj in user_queryset %}#把拿到的用户对象的集体信息循环展示出来
                            <tr>
                                <td>{{ user_obj.id }}</td>
                                <td>{{ user_obj.username }}</td>
                                <td>{{ user_obj.password }}</td>
                                <td class="text-center">
                                    <a href="/edit_user/?edit_id={{ user_obj.id }}" class="btn btn-primary btn-sm">编辑</a> 
                                    <a href="/delete_user/?edit_id={{ user_obj.id }}" class="btn btn-primary btn-sm">删除</a>
    # 这里用a标签做了一个跳转,根据你get请求的格式按id来进行跳转.
                                                                                                                                                                      
                                </td>
                            </tr>
    
                        {% endfor %}
    
                    </tbody>
                </table>
        
    # views.py 下编辑功能的逻辑处理
    def edit_user(request):
        edit_id = request.GET.get('edit_id') #拿到你所要编辑的数据的id
        if request.method == "POST": #判断是post请求,就是要更改的数据
            username = request.POST.get("username")
            password = request.POST.get("password")
            # 把数据写入到数据库中
            models.Userinfo.object.filter(pk=edit_id).update(username=username,...)
            #返回到用户信息表
            return redirect('/userlist')
         # 一下是get请求的话就根据id获取到用户信息,传送到html页面去做处理
         edit_obj = models.Userinfo.object.filter(id=edit_id).forst()
         return render(request, 'edit_id.html', locals())
         
         
    # edit_user.html文件如下:
    <h2>编辑页面</h2>
                <form action="" method="post">
                    username: <input type="text" class="form-control" name="username" value="{{ edit_obj.username }}"> 
                    password: <input type="text" class="form-control" name="password" value="{{ edit_obj.password }}">
                    <br>
                    <input type="submit" class="btn btn-warning">
                </form>
           # 里面会显示原来的用户名和密码,你删除修改即
           
    # 删除功能
    def delete_user(request):
        defete_id = request.GET.get('edit_id') # 根据get请求拿到id对应的一条数据,
        models.Userinfo.object.filter(pk=delete_id).delete() #直接根据id进行删除并返回总用户表
        return redirect('/userlist')
    
    
    #通过反向解析来实现用户的编辑与删除功能
    #编辑功能
    url(r'^edit_user/(/d+)', views.edit_user, name='edit') #正则匹配 ,规定edit后为数字格式,
    
    #html文件,使用反向解析
    {% for user_obj in user_queryset %}
         <td>
              <a href="{% url 'edit' user_obj.pk %}">编辑</a> #这里是你的id号
              <a href="{% url 'edit' user_obj.pk %}">删除</a>
         <td>
     {% endfor %}
     
     
     views文件:使用反向解析
     def edit_user(requset, edit_id) #通过一个值直接那来接受, 不用使用get来获取
     
     
    

    图书管理系统表设计

    分析这表与表之间的关系:
    
    图书表    --->  与出版社多对一,一个出版社可以出多本书(书是多的一方)外键健在多的一方
    作者表    --->  作者与书是多对多的关系,一本书有多个作者,一个作者也可以有多本书,需要建立第三张表
    出版社表  --->  与图书表有对应关系
    作者详情表--->   与作者表是一对一的关系
    
    在models.py下表如下:
    # 图书表
    class Book(models.Model):
        title = models.CharField(max_length=32)  # 书籍名字
        price = models.DecimalField(max_digits=6, decimal_places=2)
    
        # 书和出版社是一对多的关系,所以外键在多的一方
        publish = models.ForeignKey(to='Publish')  # 表示建立一对多关系
        # 这里无需加id字段, pycharm会自动给你加
    
        # 书和作者是多对多的一个关系,外键在哪都行.建议在查询频率高的一方.
        authors = models.ManyToManyField(to='Author')
        # 在django建多对多表的话,它会自动给你创建,不需要重新写
    
    
    # 出版社表
    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')
        # 这是一对一的意思,to就是表示要和哪张表建立关系
    
    
    # 详情表
    class AuthorDetail(models.Model):
        addr = models.CharField(max_length=255)  # 地址详细信息
        age = models.IntegerField()  # 年龄
    
    

    无名有名分组&反向解析

    在urls.py里面:会牵扯到有名分组和无名分组
    
     url(r'^test_add/(d+)/', views.testadd,name='xxx'), 这是无名分组
     url(r'^test_add/(?P<year>d+)/', views.testadd,name='xxx'), 这是有名分组.
     
     1.无名分组反向解析:
     前端解析:
        <a href="{% url 'xxx' 1 %}">111</a>, 
        #你要按照规定格式解析值,(d+)就是数字的意思,所以你要加个数字  
        
      后端解析:
         url = reverse('xxx', args=(1,))
         # 后端接收的话你需要有一个数字接收.这就是上面用到编辑时用到的方法
    2.有名分组反向解析
      前端解析:
          <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})
      
    

    路由分发

    在django里面的app可以有自己的static文件, templates文件夹, urls.py
    
    项目名下面的urls.py不在做路由与视图函数的对应关系,
    而是做一个中转站,只负责将请求分发到不用的app中去,
    然后在app中的urls.py完成路由与视图函数的对应关系.
    
    而你的项目名下的urls.py只需要做一个路由的分发即可
    from django.cong.urls import url, include
    
    url(r'^app01/', include(app01_urls)), 
    url(r'^app02/', include(app02_urls)),
    这就是实现了一个路由的分发,如果有任务上来先看属于哪个app然后分发给那个app去做.
    
    

    名称空间

    总路由

      总路由
            url(r'^app01/',include('app01.urls',namespace='app01'))
            url(r'^app02/',include('app02.urls',namespace='app02'))
            
            reverse('app01:index')
            reverse('app02:index')
        
            通常情况下 起别名的时候 前面可以加上你的应用名
    

    伪静态

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

    1. 这样做的目的就是为了提高搜索引擎的SEO查询的优先级.
    2. 在搜索收录网站时,会优先收录看上去像是静态文件的资源.

    但是无论你怎样进行伪静态的优化,也比不过充钱的

    虚拟环境

    针对于不同的项目,只需要安装该项目所需要用到的模块,用不到的不需要装

    1. 不同的项目有专门的解释器环境与之对应
    2. 每创建一个虚拟环境,就是想当与重新下载了一个纯净的python解释器
    3. 虚拟环境的话建议不要创建太多,否则话会占用大量资源

    django版本的区别

    分别比较django1.x版本和django2.x版本
    
    区别:
       urls.py中1.x用的是url, 而在2.x中用的是path
       并且2.x中的path第一个值他不支持正则表达式,但是可以通过其他的方法实现
       这个就用到它的一个re_path模块,如果你调用这个话就会和1.x里面的url一样的用法
    
  • 相关阅读:
    phpstorm 2016.3.2 的最新破解方法(截止2017-2-20)
    在GitHub多个帐号上添加SSH公钥
    mac laravel 环境变量设置bash_profile
    Laravel的三种安装方法总结
    laravel登录后台500错误!
    composer镜像安装laravel
    phpstorm 代码按列对齐
    .DS_Store 文件是什么?Mac下面如何禁止.DS_Store生成
    如何在Mac下显示Finder中的所有文件
    PHP_环境配置_python脚本_2017
  • 原文地址:https://www.cnblogs.com/kangwy/p/11723335.html
Copyright © 2011-2022 走看看