小编Jam*_*new的帖子

PHP OOP ::构建API包装类

我有一个应用程序,它本质上是第三方API的包装器.该应用程序不使用数据库,只存储单个cookie,这是API所需的会话ID.

API是一个允许用户使用的购物系统

-login/register/edit profile/logout

- 买的商品

-做捐献

-成为会员

API有50个左右的方法,我的应用程序需要连接到这些方法.示例API调用是addItemToBasket(),addDonation(),GetUserDetails()等.

我试图弄清楚我的应用程序中应该是什么类.这是我到目前为止:

1)APIManager()类 包含与第三方API中公开的方法一对一匹配的方法,并提供与远程API服务器建立连接的机制.因此用户将通过登录

APIManager->loginUser($sessionKey, $uid, $pwd);
Run Code Online (Sandbox Code Playgroud)

并且远程API会将用户设置为已登录.如果需要,我的应用程序可以通过调用API来检查任何会话密钥的登录状态:

 APIManager->isLoggedIn($sessionKey);
Run Code Online (Sandbox Code Playgroud)

2)User()类 这包含在处理API调用(如Register或Login)之前包含所需业务逻辑的方法.一个示例方法是:

function login($_POST) {
    //perform sanity checks, apply business rules etc.
    //if certain conditions are met, we may pass in a promo code, $pc

    APIManager->loginUser($sessionkey, $_POST['uid'], $_POST['pwd'], $pc);
}
Run Code Online (Sandbox Code Playgroud)

我意识到我可能只是从登录页面调用APIManager,而不是拥有User类本身,但我觉得因为在我们实际调用API的loginUser()方法之前需要运行一些业务逻辑,所以感觉有权在User类中处理.我很想知道人们对此的看法.

3)篮子()类

篮子是在第三方API中管理的,所以我的应用程序的作用是进行适当的API调用以将新项目添加到购物篮,删除项目,查看购物篮等.我的应用程序对篮子一无所知,直到从中检索数据API,也不能通过API进行任何更改.同样,将这种相关逻辑分组到Basket类中是合适的.前端网页可能会调用以下内容:

Basket->addItem(23);
Run Code Online (Sandbox Code Playgroud)

而这个Basket类中的addItem()方法看起来像:

addItem($itemID) {
   //perform checks, apply business rules e.g. if user is eligible for discount
        APIManager->addToCart($itemID, $discount);
}
Run Code Online (Sandbox Code Playgroud)

其中addToCart()是我们调用来处理项目的第三方API方法.

4)捐赠()类

这允许用户进行捐赠.捐赠出现在篮子里,可以从篮子里取出.我想到只是在Basket类中添加一个addDonate()方法而不用担心有Donation对象,但是......(见下文)

5)会员资格()类

...会员资格实际上是一种捐赠!该API将捐赠进入某个帐户作为1年会员资格,而不是简单的捐赠.我们无法更改第三方API的逻辑/行为. …

php shopping-cart class-design

11
推荐指数
1
解决办法
6227
查看次数

Bootstrap 搜索框和按钮与标题文本右侧对齐(不在导航栏中)

我正在使用 Bootstrap 3.3.7,在小屏幕上查看时,很难将搜索框和按钮放在标题文本下方。

我想让它堆叠如下:

大屏幕(目前是这样):

[Title] [search input] [submit button]
Run Code Online (Sandbox Code Playgroud)

较小的屏幕:

[Title]
[search input] [submit button]
Run Code Online (Sandbox Code Playgroud)

小屏幕:

[Title]
[search input]
[submit button]
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助。我已经在这方面工作了很长时间,我的 CSS 技能太缺乏了,无法取得任何体面的进展。谢谢。

大屏幕:

在此处输入图片说明

较小的屏幕(按钮被切断):

在此处输入图片说明

小屏幕:

在此处输入图片说明

这是我的代码:

<nav class="navbar navbar-inverse navbar-fixed-top">
     <div class="container">
         <!-- all the navigation stuff -->
    </div>
</nav>

<!-- main content -->
<div class="container" role="main">

    <div class="page-header">

        <form action="" method="GET" class="form-inline pull-right">

            <div class="form-group form-group-lg has-feedback">

                <label class="sr-only" for="search">Search</label>
                <input type="text" class="form-control" name="q" id="search" placeholder="Search">

                <span class="glyphicons glyphicons-xl glyphicons-group form-control-feedback"></span>

            </div>

            <button type="submit" class="btn btn-lg …
Run Code Online (Sandbox Code Playgroud)

css twitter-bootstrap twitter-bootstrap-3

5
推荐指数
1
解决办法
1万
查看次数

在 django admin 中获取 list_display 以显示多对一关系的“多”端

我想使用 list_display 显示所有宠物主人(客户),并为每个主人显示他们所有宠物(患者)的逗号分隔列表。

外键在Patient表中,这样一个主人可以有很多宠物,但一个宠物只能有一个主人。

我有以下工作,但想要一些关于这是否是可接受的方法的建议。

from .models import Client, Patient

class ClientAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'mobile', 'patients')

    def patients(self,obj):
        p = Patient.objects.filter(client_id=obj.pk)
        return list(p)
Run Code Online (Sandbox Code Playgroud)

这是它的样子: 在此处输入图片说明

感谢您的任何指导。

更新:这是我目前所处的位置:

这是我迄今为止设法开始工作的内容

class ClientAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'mobile', 'getpatients')
    def getpatients(self, request):
        c = Client.objects.get(pk=1)
        p = c.patient_fk.all()
        return p
Run Code Online (Sandbox Code Playgroud)

这是遵循文档 re: following关系向后

当然,上面的示例将客户端对象的数量“固定”为一个 (pk=1),因此我不确定如何获得所有客户端的结果。

@pleasedontbelong - 我试过你的代码,非常感谢。我几乎肯定做错了什么,因为我收到了一个错误。但是你知道 FK 现在有

 related_name = 'patient_fk'
Run Code Online (Sandbox Code Playgroud)

这解释了为什么我不使用patient_set(因为FOO_set被覆盖)

所以这就是我所拥有的:

class ClientAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'mobile', 'getpatients')

    def get_queryset(self, request):
        qs = super(ClientAdmin, self).get_queryset(request)
        return …
Run Code Online (Sandbox Code Playgroud)

python django django-admin python-3.x

3
推荐指数
1
解决办法
3069
查看次数