zoukankan      html  css  js  c++  java
  • 如何用Django建立一个后台CRM系统07

    完善userPage页面

        A

        -对于顾客登录后看到的页面要像之前做后台顾客登录页面一样 

        所以我们要在Customer数据库属性中加入user属性 让user和customer一对一 才能找出order_set的全部订单

        添加user属性的目的是更好的导入模型   让用户能看到数据

          -在models.py的Customer数据库中 导入后台model模板中的user  再加入user属性  

    from django.contrib.auth.models import User
    
    class Customer(models.Model): 
        user = models.OneToOneField(User,null=True,on_delete=models.CASCADE)
        xxxxx

          - 在crm中  输入 python manage.py makemigration

                 python manage.py migrate  确认参数

          -在127.0.0.1/admin/customer中将 某一个用户加入user属性中的任一属性

          -编写userPage函数 用类似ForeignKey那种反向求出order全部数据 然后再套用之前customer和 status 的模板就可以了

    def userPage(request):
        order = request.user.customer.order_set.all()
        total_order = order.count()
        Delivered = Order.objects.filter(status='Delivered').count()
        Pending = Order.objects.filter(status='Pending').count()
        context = {'order':order,'total_order':total_order,'Delivered':Delivered,'Pending':Pending}
        return render(request, 'accounts/userPage.html',context)

           -上面的userPage是超级用户所看到的页面

            下面的userPage是普通用户所看到的页面

        B

        对于作为用户  想要上传头像

        -在models.py模型中为Customer 加入 profile_pic属性

          blank允许留空白  default为用户开始固定的头像

    class Customer(models.Model):
        user = models.OneToOneField(User,null=True,blank=True,on_delete=models.CASCADE)
        name = models.CharField(max_length=200,null=True)
        phone = models.CharField(max_length=200,null=True)
        email = models.CharField(max_length=200,null=True)
        profile_pic = models.ImageField(default='j.jpg',null=True, blank=True)
        date_created = models.DateTimeField(auto_now_add=True, null=True)

        - pip install Pillow  引入库  python  manage.py makemigrations   

                    python  manage.py  migrate

        -在settings.py中 添加静态地址

        

        -为在可以用独立的url打开图片  需要在urls.py中添加静态地址

    from django.contrib import admin
    from django.urls import path,include
    
    #自身的俩条地址
    from django.conf import settings
    from django.conf.urls.static import  static
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('',include('accounts.urls'))
    ]
    
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

          C

          创建用户setting页面

          -在Navtar模板里面添加 else 语句  让其为customer身份时只显示 setting

      {% if request.user.is_staff %}
          <li class="nav-item active">
            <a class="nav-link" href="{% url 'home' %}">Dashboard</a>
          </li>
    
          <li class="nav-item">
            <a class="nav-link" href="{% url 'products' %}">Products</a>
          </li>
            {% else %}
    
          <li class="nav-item ">
                <a class="nav-link" href="{% url 'account' %}">Setting</a>
          </li>
            {% endif %}

          -在urls.py写入 url

        path('account/',views.accountSetting,name='account'),

          -在views。py写入函数   accountSetting

          -在templates中写入account模板

            -需要在后面加入url

              {{ request.user.customer.profile_pic.url }}
            -目的是更新 静态图片
             enctype="multipart/form-data"
    {% extends 'accounts/main.html' %}
    {% load static %}
    {% block content %}
    <style>
        .profile-pic{
            width: 200px;
            height: 200px;
            margin: 0 auto;
            border-radius: 50%;
        }
    </style>
        <br>
        <div class="row">
            <div class="col-md-3">
                <div class="card card-body">
                    <a class="btn btn-warning " href="{% url 'userPage' %}">Back to Profile</a>
                    <hr>
                    <h3 style="">Account Setting</h3>
                    <hr>
                    <img class="profile-pic" src="{{ request.user.customer.profile_pic.url }}">
                </div>
            </div>
            <div  class="col-md-9">
                <div class="card card-body">
                    <form method="POST" action="" enctype="multipart/form-data">
                        {% csrf_token %}
                        {{ form.as_p }}
                        <input class="btn btn-primary" type="submit" name="Update Information">
    
                    </form>
                </div>
    
            </div>
    
        </div>
    
    
    {% endblock %}

            -其中模板需要传入参数form 即customer表单数据

              在.forms.py中创建CustomerForm函数(思路跟之前注册用户表单类似)

    
    
    from django.forms import  ModelForm

    class
    CustomerForm(ModelForm): class Meta: model = Customer fields = '__all__' exclude = ['user'] # fields = ['name', 'phone', 'email', 'profile_pic']

            -编写accountSetting函数

              -customer需要求

              -instance= customer返回customer表单中原本数据

              -form = CustomerForm(request.POST, requser.FILES, instance = customer)   request.FILES返回图像

    @login_required(login_url='login')
    @allowed_user(allowed_roles=['customer'])
    def accountSetting(request):
        customer = request.user.customer
        form = CustomerForm(instance=customer)
        if request.method == 'POST':
            form = CustomerForm(request.POST, request.FILES, instance=customer)
            if form.is_valid():
                form.save()
        context = {'form':form}
        return render(request,'accounts/account.html',context)

          

  • 相关阅读:
    阿里云 oss (二) 生成令牌
    doc转html
    js 实现下载本地文件
    vue 中使用video 使用视频/嵌入视频
    小程序裁剪
    车牌号正则
    小程序单选框 radio
    小程序省市三级联动 及日期选择 (年月日)
    小程序图片选择,小程序图片上传及调用后台接口上传
    element ui省市区三级联动,及获取三级联动的name值
  • 原文地址:https://www.cnblogs.com/kangkang1999/p/13423926.html
Copyright © 2011-2022 走看看