小编won*_*ile的帖子

用Python解决图形问题

我有一种情况,我想用Python来解决这个问题,但不幸的是我对图表知之甚少.我找到了一个看起来非常适合这个相对简单的任务的库networkx,但是我遇到的问题是我想做的事情,这应该是相当简单的.

我有一个节点列表,可以有不同的类型,以及两个"类"的邻居,向上和向下.任务是在两个目标节点之间找到路径,并考虑到一些约束:

  • 只能遍历特定类型的节点,即如果起始节点是x类型,则路径中的任何节点都必须来自另一组路径y或z
  • 如果节点的类型为y,则只能传递一次
  • 如果节点具有类型z,则可以传递两次
  • 如果访问类型为z的节点,则退出必须来自不同类别的邻居,即如果从上方访问,则退出必须来自向下

所以,我尝试了一些实验,但正如我所说,我一直在努力.首先,我不确定这实际代表什么类型的图表?它不是方向性的,因为从节点1到节点2,或从节点2到节点1无关紧要(除了在最后一个场景中,因此使事情复杂化......).这意味着我不能只创建一个简单的多向图形,因为我必须考虑到这个约束.其次,我必须遍历这些节点,但指定只有特定类型的节点必须可用于路径.此外,如果最后一个场景发生,我必须记住进入和退出类/方向,这使它处于某种有针对性的状态.

这是一些示例模型代码:

import networkx as nx

G=nx.DiGraph()
G.add_node(1, type=1)
G.add_node(2, type=2)
G.add_node(3, type=3)
G.add_edge(1,2, side="up")
G.add_edge(1,3, side="up")
G.add_edge(2,1, side="down")
G.add_edge(2,3, side="down")
for path in nx.all_simple_paths(G,1,3):
    print path
Run Code Online (Sandbox Code Playgroud)

输出相当不错,但我需要这些约束.那么,您是否有一些建议如何实现这些,或者给我一些关于理解这类问题的指导,或者针对这个问题提出不同的方法或库?也许一个简单的基于字典的算法适合这种需要?

谢谢!

python algorithm graph path networkx

11
推荐指数
2
解决办法
1155
查看次数

Flask-login不会重定向到上一页

考虑到这一点,我已经看到了很多问题,但未能解决我的问题.我有一个带烧瓶登录的Flask应用程序用于会话管理.而且,当我尝试在没有登录的情况下查看页面时,我会被重定向到一个形式的链接/login/?next=%2Fsettings%2F

问题是,据我所知,"下一个"参数保存了我实际需要的网站部分,但是当向登录表单提交请求时,它是通过完成的POST,所以这个论点不再存在可供我重定向到.

我试图使用Request.path申请(网址),但都只是返回/login/的请求URL /路径,而不是实际的/login/?next=xxx.

我的登录方法如下:

@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        #getting the user
        user = User.get(request.form['username'])
        if user.user is None:
            return redirect('/login/')
        #actual login proces
        if user and check_password_hash(user.user.password, request.form['password']):
            login_user(user, remember=remember)
            #the redirection portion of the login process
            return redirect(request.path or ("/")) # I tried various options there but without success, like request.args['next'] and such

        return redirect('/login/')

    else:
        return redirect('/')
Run Code Online (Sandbox Code Playgroud)

谢谢

python redirect login flask flask-login

9
推荐指数
1
解决办法
7608
查看次数

Leaflet.label没有显示标记

我有一组geoJSON点,并且它们附有相应的标签.

var points = L.geoJson (null, {
    onEachFeature: function (feature, layer) {
        layer.options.riseOnHover=true; //tried adding this
        layer.options.riseOffset=9999; //as well as this
        layer.bindLabel(feature.properties["name"], {className: 'map-label'});
        L.setOptions(layer, {riseOnHover: true}); //this as well
    }
});
Run Code Online (Sandbox Code Playgroud)

这是遍历JSON文件中每个功能并创建一组点的代码.现在,将标记添加到地图的实际功能如下:

var addJsonMarkers = function() {
    map.removeLayer(markers);
    points.clearLayers();

    markers = new L.layerGroup();
    points.addData(dataJson);
    markers.addLayer(points);

    map.addLayer(markers);

    return false;
};
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是无论我尝试添加什么(你可以看到我的评论),标签总是在标记后面,这不是预期的行为.

背后的标签截图

我希望标签能够在它之上.我试图手动更改z-indexmap-label类,以及与众多的解决方案,riseOnHover这似乎是这种情况的解决方案,但唱片公司仍落后.有谁看到我做错了什么?

完整的代码可以在这里看到

javascript google-maps z-index google-maps-markers leaflet

8
推荐指数
1
解决办法
1782
查看次数

Flask-login未按预期工作

Flask-login似乎不是"在会话中保存用户".在/login处理程序上,用户登录并记住通过login_user(user, remember=True),但在打开任何其他页面时,返回的用户是AnonymousUser,而不是来自User类的登录用户.

下面是简单的用户类,其中包含从另一个用于数据库存储的类中获取用户的方法.

class User():
    def __init__(self, user):
        self.user = user

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    # Flask-Login is technically able to support these.
    # We don't swing that way.
    def is_anonymous(self):
        return False

    @staticmethod
    def get(userid):
        print 'getuser instance'
        return User(find_user_by_username(userid))

    def get_id(self):
        return self.user.username

    def __repr__(self):
        return '<User %r>' % self.user.username

    def get_auth_token(self):
        print 'gettingtoken'
        data = [self.user.id, self.user.username]
        return login_serializer.dumps(data)
Run Code Online (Sandbox Code Playgroud)

获取用户和用户加载器的方法如下:

def find_user_by_username(username):
    print 'find …
Run Code Online (Sandbox Code Playgroud)

python session oauth flask flask-login

7
推荐指数
1
解决办法
4868
查看次数

将Cookie传递给GET请求的问题(POST后)

我现在被困在这个问题好几天了,我的眼睛开始受到尝试不同组合的时间的伤害,但没有成功.问题是,我正在制作一个应用程序,它必须从互联网上获取数据,解析它然后显示给用户.我已经尝试了几种方法,并且使用JSOUP非常有帮助,特别是在解析和从结果中获取数据时.

但是,有一个问题我无法解决.我已尝试使用常规HTTPClient和JSOUP,但我无法成功获取所需的数据.这是我的代码(JSOUP版本):

public void bht_ht(Context c, int pozivni, int broj) throws IOException {
    //this is the first connection, to get the cookies (I have tried the version without this method separate, but it's the same
    Connection.Response resCookie = Jsoup.connect("http://www.bhtelecom.ba/imenik_telefon.html")
            .method(Method.GET)
            .execute();
    String sessionId = resCookie.cookie("PHPSESSID");
    String fetypo = resCookie.cookie("fe_typo_user");
    //these two above are the cookies

    //the POST request, with the data asked
    Connection.Response res = Jsoup.connect("http://www.bhtelecom.ba/imenik_telefon.html?a=search")
              .data("di", some_data)
              .data("br", some_data)
              .data("btnSearch","Tra%C5%BEi")
              .cookie("PHPSESSID", sessionId)
              .cookie("fe_typo_user", fetypo)
              .method(Method.POST)
              .execute();

    Document dok = …
Run Code Online (Sandbox Code Playgroud)

java cookies android http jsoup

4
推荐指数
1
解决办法
4570
查看次数

python-requests 发出 GET 而不是 POST 请求

我有一个每日 cron 来处理我的应用程序中的一些重复事件,我不时注意到日志中弹出一个奇怪的错误。除其他外,cron 会对一些代码进行验证,并且它使用运行在同一服务器上的 web 应用程序,因此验证请求是通过POST带有一些数据的请求发出的。

url = 'https://example.com/validate/'
payload = {'pin': pin, 'sku': sku, 'phone': phone, 'AR': True}
validation_post = requests.post(url, data=payload)
Run Code Online (Sandbox Code Playgroud)

所以,这会产生实际的请求,我会记录响应。有时,最近高达 50% 的请求,响应包含来自 nginx 的以下消息:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method GET is not allowed for the requested URL.</p>
Run Code Online (Sandbox Code Playgroud)

因此,实际请求是使用GET方法发出的,而不是代码中指示的POST。在 nginx 中,access.log我可以看到该条目:

123.123.123.123 - - [18/Feb/2015:12:26:50 -0500] "GET /validate/ HTTP/1.1" 405 182 "-" "python-requests/2.2.1 CPython/2.7.6 Linux/3.13.0-37-generic"
Run Code Online (Sandbox Code Playgroud)

该应用程序的 uwsgi 日志显示了类似的内容: …

python nginx http-status-code-405 uwsgi python-requests

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

从github中删除文件

我已经在一段时间内将github用于一个项目,但仅作为问题跟踪器.因此,今晚我花了一些时间来处理代码,并且犯了一个菜鸟错误:我提交了凭据文件和其他不必要的数据.我现在已经将这些添加到.gitignore文件中,它们应该不再是问题,但我发现它们在历史记录中可用.

这带来了安全问题,因此我必须对其进行排序并删除那些敏感数据.我是目前唯一的开发人员,所以这就是为什么我只在我的电脑和实际的服务器上保存代码,但也希望得到这个.

到目前为止,我已经尝试了这篇文章,发现了一些关于SO的问题,但是还没有弄明白这一点.我大多得到一些像这样的错误:fatal: ambiguous argument 'rm': unknown revision or path not in the working tree.

我会删除整个仓库,但我有很多跟踪数据的问题,所以我需要保留它,所以这不是一个选项.我不介意其他提交,我可以从头开始使用本地机器的代码,但需要一些方法来丢失旧的提交及其完整的历史记录,或者更改这些文件(有些东西在.gitignore目录中,所以可能非常繁琐的删除).

我尝试过git rebase -i,但在那里我只看到我的最后三次提交(测试),没有推,其余的在线,其中10个左右没有显示.

我使用的回购是私有的,我和客户只能访问,所以没有第三方看到这个.

我是git的新手,谢谢你的时间和帮助!

git github rebase git-rewrite-history

2
推荐指数
1
解决办法
479
查看次数

查询数据库时提高页面速度

我正在使用Flask进行我正在使用的一个应用程序,以及用于存储数据的sqlalchemy和MySQL数据库.Jinja2用于模板化.在开发过程中,一切都很好,但是现在当使用更大的数据集时,我对包含大量数据的一些网页的呈现速度非常慢.例如,此代码处理用户列表:

def users():
    q = Users.query.all()
    out = []
    for i in q: 
        try:
            something_i_need = Table.query.filter_by(email=i.email).order_by(Table.date).first().id
        except:
            something_i_need = 0
        out.append({
                'id': i.id,
                'last_name': i.last_name,
                'first_name': i.first_name,
                'middle_name': i.middle_name,
                'phone': i.phone,
                'team': i.team,
                'status': i.status,
                'needed': something_i_need,
                'some_more_data': i.some_more_data
            })
    return render_template('users.html', list_of_users=out)
Run Code Online (Sandbox Code Playgroud)

数据有点简化,因为列表中有更多字段.对此位置的调用(一次查询大约2000个用户)需要10秒以上,然后页面的负载也需要10-20.该表由以下主题函数包装,来自此链接的第一个表,虽然在某些列上禁用排序功能有帮助,但它仍然非常慢.

所以,我想知道,我如何优化此过程或生成模板以使其更快?我在Amazon EC2实例上运行它Python 2.7.3 and mod_wsgi, Flask 0.9, Flask-SQLAlchemy=0.16, Jinja2==2.7, MySQL-python=1.2.4, SQLAlchemy=0.8.1.一个"明显"的解决方案,一次分页并返回100个左右的记录将真正起作用,因为列表必须包含所有用户以进行排序(主要是日期),因此该解决方案将是最后的手段.

提前致谢!

mysql query-optimization jinja2 flask flask-sqlalchemy

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

Shell脚本突然停止工作

我在网上找到了以下脚本,它可以备份数据库并将其上传到S3存储桶:

#!/bin/bash
# Shell script to backup MySql database

# CONFIG - Only edit the below lines to setup the script
# ===============================

MyUSER="test"           # USERNAME
MyPASS="test"       # PASSWORD
MyHOST="localhost"      # Hostname

S3Bucket="test" # S3 Bucket

# DO NOT BACKUP these databases
IGNORE="information_schema mysql performance_schema phpmyadmin"

# DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING
# ===============================

# Linux bin paths, change this if it can not be autodetected via which command
MYSQL="$(which mysql)"
MYSQLDUMP="$(which …
Run Code Online (Sandbox Code Playgroud)

mysql bash shell mysqldump amazon-s3

0
推荐指数
1
解决办法
306
查看次数