ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day23 stark组件开发之添加功能实现

2022-02-20 17:33:00  阅读:212  来源: 互联网

标签:form url self day23 add stark 组件 model class


基类列表页面增加按钮功能显示

基类页面展示增加按钮逻辑

        # ##########3. 添加按钮 #########
        add_btn = self.get_add_btn()

基类方法中增加按钮函数封装

    has_add_btn = True

    def get_add_btn(self):
        if self.has_add_btn:
            return "<a class='btn btn-primary' href='%s'>添加</a>" % self.reverse_add_url()
        return None

基类中增加按钮url加密
启动函数需要增加self.request = None

页面展示函数需要调用时传参 self.request = request

    def reverse_add_url(self):
        #根据别名反向生成url
        name = "%s:%s" % (self.site.namespace, self.get_add_url_name,)
        base_url = reverse(name)
        if not self.request.GET:
            add_url = base_url
        else:
            param = self.request.GET.urlencode()
            new_query_dict = QueryDict(mutable=True)
            new_query_dict['_filter'] = param
            add_url = "%s?%s" % (base_url, new_query_dict.urlencode())
        return add_url

stark 组件中调用方法

    has_add_btn = True #控制按钮开关

模板中增加判断

        {% if add_btn %}
            <div style="margin: 5px 0;">
                {{ add_btn|safe }}
            </div>
        {% endif %}

效果展示

添加功能页面样式实现

添加页面样式forms封装
基类中增加form方法

class StarkModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(StarkModelForm, self).__init__(*args, **kwargs)
        # 统一给ModelForm生成字段添加样式
        for name, field in self.fields.items():
            field.widget.attrs['class'] = 'form-control'

基类增加样式调用函数

    model_form_class = None

    def get_model_form_class(self):
        if self.model_form_class:
            return self.model_form_class

        class DynamicModelForm(StarkModelForm):
            class Meta:
                model = self.model_class
                fields = "__all__"

        return DynamicModelForm

stark组件中也可以自定样式

stark.py

# -*- encoding: utf-8 -*-
"""
@File    : stark_simon.py
@Time    : 2022/1/16 20:09
@Author  : simon
@Email   : 294168604@qq.com
@Software: PyCharm
"""

from stark.service.v1 import site, StarkHandler, get_choice_text, StarkModelForm
from app01 import models


# http://127.0.0.1:8000/stark/app01/depart/list/
class DepartHandler(StarkHandler):
    list_display = ['id', 'title', StarkHandler.display_edit, StarkHandler.display_del]


# http://127.0.0.1:8000/stark/app01/userinfo/list/
site.register(models.Depart, DepartHandler)


class UserInfoModelForm(StarkModelForm):
    class Meta:
        model = models.UserInfo
        fields = ['name', 'gender', 'classes', 'age', 'email']


class UserInfoHandler(StarkHandler):
    # 定制页面显示的列
    list_display = ['name',
                    get_choice_text('性别', 'gender'),
                    get_choice_text('班级', 'classes'),
                    'age', 'email', 'depart',
                    StarkHandler.display_edit, StarkHandler.display_del]

    per_page_count = 1
    has_add_btn = True

    model_form_class = UserInfoModelForm

    def save(self, form, is_update=False):
        form.instance.depart_id = 1
        form.save()

页面样式效果

添加功能业务实现

基类中添加函数逻辑编写

    def add_view(self, request):
        """
        添加页面
        :param request:
        :return:
        """
        # self.models_class
        model_form_class = self.get_model_form_class()
        if request.method == 'GET':
            form = model_form_class()
            return render(request, 'stark/change.html', {'form': form})
        form = model_form_class(data=request.POST)
        if form.is_valid():
            self.save(form, is_update=False)
            # 在数据库保存成功后,跳转回列表页面(携带原来的参数)。
            return redirect(self.reverse_list_url())
        return render(request, 'stark/change.html', {'form': form})

标签:form,url,self,day23,add,stark,组件,model,class
来源: https://www.cnblogs.com/simon1993/p/15915928.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有