Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 54

0
votes
answers
51 views
+10

有沒有辦法在將文件更改爲django中的合適模型後將文件上傳到數據庫?

0

如果管理員用戶上傳文件(如csv文件格式等),我想製作管理頁面,更改合適的模型後保存在數據庫中。例如,假設用戶上傳以下文件。有沒有辦法在將文件更改爲django中的合適模型後將文件上傳到數據庫?

year month survived ticket 
2002 08  1  cn-101 
2001 09  0  cn-102 
2002 11  1  cn-103 

我想什麼要提出的是,當用戶上傳管理頁面文件,將其更改文件的模型如下圖所示,並保存在數據庫中。

class SampleModel(models.Model): 
    year = models.IntegerField() 
    month = models.IntegerField() 
    survived = models.booleanField() 
    ticket = models.CharField() 

有沒有辦法在Django做到這一點?

+0

有沒有內置在Django的管理應用程序,以這種方式工作的功能。但編寫一個視圖可以讓你從csv文件創建模型實例,這相當容易。這是一種api視圖。你需要考慮的是如果你兩次發佈相同的數據會發生什麼。如果您向數據庫添加更多行,或者應該忽略重複項。是否應該有錯誤信息? –

+0

謝謝你的建議!如果管理員用戶發佈相同的數據,我想讓重複項被忽略 –

沙发
0
0

可以繼承save_model方法如下

# admin.py 
from django.contrib import admin 

class SampleAdmin(admin.ModelAdmin): 
    def save_model(self, request, obj, form, change): 
    file_path = request.FILES['myfile'] 
    with open(file_path) as f: 
     for line in f: 
     year, month, survived, ticket = f.split() 
     SampleModel.objects.create(year=year, 
            month=month, 
            survived=bool(int(survived)), 
            ticket=ticket) 
    super().save_model(request, obj, form, change) 
+0

它適用於我!謝謝 ! –

0
votes
answers
17 views
+10

ValueError異常在/後/不JSON對象可以被解碼

0

這是我的JSON:ValueError異常在/後/不JSON對象可以被解碼

{ 
    "documents": [ 
       { 
       "score": 0.5, 
       "id": "1" 
        } 
       ], 
    "errors": [] 
} 

我想知道我怎麼能取「得分」而不將其轉換成字典因爲當我嘗試使用? json.loads它給我以下錯誤:

ValueError at /post/ 
No JSON object could be decoded 

這是我正在使用的代碼。

def GetSentiment(documents): 
    "Gets the sentiments for a set of documents and returns the 
    information." 
    headers = {'Ocp-Apim-Subscription-Key': accessKey} 
    conn = httplib.HTTPSConnection(uri) 
    body = json.dumps(documents) 
    conn.request("POST", path, body, headers) 
    response = conn.getresponse() 
    return response.read() 

documents = {'documents': [ 
         {'id': '1', 'language': 'en', 'text': caption}, 
      ]} 
result = GetSentiment(documents) 
resp_dict = json.loads(result) 
print resp_dict 
score = resp_dict["documents"][0]["score"] 
return score 
+0

(改進了代碼格式,使其更容易閱讀) – Anupam

+0

嗨,告訴我們你想做什麼,因爲也許你可以使用另一種方法 –

+0

@mohammedqudah我只想獲取分數值,因爲我想使用它進行情緒分析。要獲取分數值,我只能使用json.loads和那個bug。 –

沙发
0
0

我看着你的JSON轉換的代碼,它是罰款:

>>> result = '{"documents": [{"score": 0.5,"id": "1"}],"errors": []}' 
>>> import json 
>>> resp_dict = json.loads(result) 
>>> score = resp_dict["documents"][0]["score"] 
>>> print score 
0.5 # success ! 

所以您的問題必須與result對象,這是不是你的建議。一定是你的GetSentiment函數有問題。

您的print result系列產生了什麼?另外,你有沒有嘗試過使用類似requests這樣的東西來讓你的生活更輕鬆?

0
votes
answers
23 views
+10

Bot沒有返回HttpResponse對象。它返回None而不是

-1

我寫電報的機器人爲telebotDjango。當我在服務器上運行他並觀看完整日誌時,我有下一個文本:Bot沒有返回HttpResponse對象。它返回None而不是

Internal Server Error: /bot/ 
Traceback (most recent call last): 
    File "/home/fishbot/env/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner 
    response = get_response(request) 
    File "/home/fishbot/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 198, in _get_response 
    "returned None instead." % (callback.__module__, view_name) 
ValueError: The view bot.views.bot didn't return an HttpResponse object. It returned None instead. 

有人幫助我嗎?

P.S我不能在標籤0附加telebot

沙发
0
1

在Django中,您必須在您的視圖返回HttpRequest實例。

試着做這樣的事情:

from django.http import HttpResponse 

def current_datetime(request): 
    response = '' # Put whatever you want to return in here. 
    return HttpResponse(response) 
+0

THX!這幫助了我 –

0
votes
answers
41 views
+10

如何設置redisearch默認限制的限制是10。我想設置50

1
from redisearch import Client 

client = Client('myIndex') 
res = client.search(search_key) 

我需要50個結果res如何設置redisearch默認限制的限制是10。我想設置50

沙发
0
3

閱讀文檔 - 您需要使用查詢對象的paging方法:http://redisearch.io/python_client/#paging

0
votes
answers
28 views
+10

如何從用戶輸入來搜索django/python中的內容?

-3

我在python/django中比較新。具有3種型號,例如某些字段:如何從用戶輸入來搜索django/python中的內容?

class Card(models.Model):  
    id = models.AutoField(primary_key=True)  
    cardtype_id = models.CharField(max_length=10) 
    holder_name = models.CharField(max_length=100) 
    card_number = models.IntegerField(default=0) 
    email = models.EmailField(blank=True) 
    birthday = models.DateField(blank=True, default=None) 
    created = models.DateTimeField(default=timezone.now) 
    updated = models.DateTimeField(default=timezone.now) 
    strip = models.CharField(max_length=20, default="strip") 

    def __str__(self): 
     return self.holder_name 

class Transaction(models.Model): 
    id = models.AutoField(primary_key=True) 
    description = models.CharField(max_length=100) 

class CardTransactions(models.Model): 
    card = models.ForeignKey(Card, on_delete=models.CASCADE) 
    transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE) 
    value = models.DecimalField(max_digits=7, decimal_places=2, blank=True) 
    value_date = models.DateTimeField(default=timezone.now) 
    created = models.DateTimeField(default=timezone.now) 
    description = models.CharField(max_length=200, blank=True) 
    table_value = models.DecimalField(max_digits=7, decimal_places=2, blank=True) 
    discount = models.DecimalField(max_digits=7, decimal_places=2, blank=True) 
    net_value = models.DecimalField(max_digits=7, decimal_places=2, blank=True) 
    doc_number = models.CharField(max_length=20, blank=True) 

我怎麼能要求用戶輸入,例如,「CARD_NUMBER」,並打印出一個HTML頁面上的「說明」?

+1

你有沒有通過Django的教程了:https://docs.djangoproject.com/en/2.0/intro/ tutorial01 /? – dvnguyen

沙发
0
0
from django.forms import model_to_dict 


def my_view(request): 
    card_num = request.GET.get('cc') 
    return HttpResponse(str(model_to_dict(Card.objects.filter(card_number=card_num).first())) 

至少類似的東西

板凳
0
0

你需要寫意見和模板做這個任務。

  • 一個視圖將呈現的HTML模板,你將有一個窗體輸入值。

  • 點擊該按鈕會調用另一個參數爲card_number的視圖,該參數將從與card_number關聯的數據庫中檢索描述,並返回到可根據您的設計顯示某些div的模板。

  • Ajax可用於調用視圖並獲取響應。

見下面的鏈接以供參考:

https://docs.djangoproject.com/en/2.0/intro/tutorial03/

https://docs.djangoproject.com/en/2.0/intro/tutorial04/

0
votes
answers
34 views
+10

Django的REST框架相同的路線,不同的

0

我使用Django的REST框架構建的API,這裏是我的問題Django的REST框架相同的路線,不同的

url(r'^profiles/(?P<pk>[0-9]*)', ProfileRetrieveView.as_view(), name='profiles-detail'), 
url(r'^profiles/(?P<pk>[0-9]*)', ProfileUpdateView.as_view(), name='profiles-update'), 

class ProfileRetrieveView(RetrieveAPIView): 

    queryset = Profile.objects.all() 
    serializer_class = ProfileSerializer 

class ProfileUpdateView(UpdateAPIView): 

    queryset = Profile.objects.all() 
    serializer_class = ProfileSerializer 
    permission_classes = (IsAuthenticated,) 

當我查詢的API與鏈接/資料/ 2和方法補丁,我收到405,方法不允許,只允許get方法,我怎麼能解決這個問題,沒有避風港把我的兩個視圖類轉換成類與GenericView基類和Retrive +更新Mixins。

+0

這是URL匹配是如何工作的?它的股價下跌l ist並選擇匹配的第一個。正確的做法是讓一個類處理它。但在路由器配置中,如果我記得正確,可以將不同的方法路由到不同的類,但是您需要URL匹配一次。 – bryan60

沙发
0
0

您應該將其壓縮爲單個端點。你可以讓一個類處理所有的列表,更新,獲取等等。嘗試...像這樣:

from rest_framework import mixins, viewsets 
class ProfileUpdateView(viewset.ModelViewSet, 
         mixins.ListModelMixin, 
         mixins.UpdateModelMixin): 

    serializer_class = ProfileSerializer 
    permission_classes = (IsAuthenticated,) 

    get_queryset(self): 
      return Profile.objects.all() 

如果你使用純模型,使用內置模型的東西,並檢查混合。它將爲您節省通用代碼編寫的噸。它有一些知道如何將請求路由到匹配的http方法的魔法。

http://www.django-rest-framework.org/api-guide/generic-views/#mixins

板凳
0
0

Django的REST框架提供了通用視圖,你不需要混入。 您可以直接使用RetrieveUpdateAPIView。提供請求方法get檢索數據,put更新數據和patch進行部分更新。

from rest_framework.generics import RetrieveUpdateAPIView 

class ProfileUpdateView(RetrieveUpdateAPIView): 
    queryset = Profile.objects.all() 
    serializer_class = ProfileSerializer 
    permission_classes = (IsAuthenticated,) 

參考:http://www.django-rest-framework.org/api-guide/generic-views/#retrieveupdateapiview

地板
0
1

urls.py

url(r'^profiles/(?P<pk>[0-9]*)', ProfileRetrieveUpdateView.as_view(), name='profiles-detail-update'), 

views.py

from rest_framework.generics import RetrieveUpdateAPIView 

class ProfileRetrieveUpdateView(RetrieveUpdateAPIView): 

    queryset = Profile.objects.all() 
    serializer_class = ProfileSerializer 

    def get_permissions(self): 
     if self.request.method == "GET": 
      return [] 
     else: 
      return [IsAuthenticated()] 
0
votes
answers
13 views
+10

如何使Django在模板更改時重新啓動runserver?

20

當我在我的項目中對python源文件進行修改時,Django檢測到並重新啓動runserver本身。但是當我修改一個django模板時,我必須殺死runserver並重新啓動它:如何在模板更改時自動重啓runserver?如何使Django在模板更改時重新啓動runserver?

沙发
0
16

該文件默認情況下會在每次請求時從磁盤讀取,因此不需要重新啓動任何內容。

有一個緩存模板加載器,但默認情況下它是禁用的。有關更多信息,請參見the documentation

板凳
0
6

針對其中一個Python源文件運行touch

由於runserver監視.py文件以進行更改,因此無法重新啓動模板(.html)中的更改。您可以通過使用touch命令虛擬編輯任何.py文件來觸發此重新啓動,該命令刷新其修改日期並保留所有其他內容相同。

+0

OP已經表示他編輯了一個Python源文件,所以我沒有看到'touch'會改變什麼。 – metakermit 2013-11-14 20:59:09

+2

@ kermit666:不,他說他編輯了一個模板。模板不是Python源文件。 – 2013-11-14 21:01:56

地板
0
5

爲了增加knutin的回答,您所面臨的問題,通過FetchFromCacheMiddleware恰好造成了如此,所有你需要做的是在settings.py文件禁用它,如下所示:

settings.py:

MIDDLEWARE_CLASSES = (
    ... 
    #'django.middleware.cache.FetchFromCacheMiddleware', 
    ... 
) 
4楼
0
0

我有一個類似的問題,但是我的模板需要運行一個django管理腳本才能更新它們。沒有簡單的方法讓django觀看其他文件類型,但是這裏有一個我使用的工作。

這是一個獨立的腳本,我現在用它來運行開發服務器:

#!/usr/bin/python 

import time, subprocess, sys, os, re 
from threading import Thread 

run = True 

def monitor(): 
    while run: 
    os.system("./manage.py update_templates") 
    os.system("touch website/urls.py") 
    os.system("inotifywait -e modify,create,delete website/templates/*.html") 

t = Thread(target=monitor) 
t.start() 
time.sleep(0.5) 

args = '' 
if len(sys.argv) > 1: 
    for i in range(1, len(sys.argv)): 
    args += sys.argv[i] +' ' 
print("./manage.py runserver %s" % args) 
os.system("./manage.py runserver %s" % args) 
run = False 
t.join() 

在以下假設這個腳本的工作原理:

  1. 使用python3
  2. 這個腳本是沿側放置manager.py
  3. manager.py可運行
  4. 該web應用程序被稱爲網站
  5. 該網站有一個名爲網站/文件urls.py
  6. 你正在使用的GNU/Linux,它支持inotify的
5楼
0
0

該文件將從磁盤,而無需重新啓動的runserver被讀取,只要確定你禁用了所有的緩存。

禁用緩存模板加載器

緩存模板加載器默認情況下不啓用,但你可能在你的生產設置中啓用此。確保緩存的模板加載器未啓用開發設置。 Django docs on the cached template loader

當您使用Django的緩存框架使用虛擬緩存框架

這可能會導致模板不重新加載。Django使用的默認框架是本地內存緩存,這意味着您必須顯式設置虛擬緩存來禁用緩存框架。 Django docs on dummy caching

6楼
0
1

您不需要重新啓動服務器來重新加載模板更改。

在生產中,你可以這樣做:
settings.py中,對於模板配置
- 刪除APP_DIRS設置
- 相反,該設置添加到選項:

'loaders': [ 
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
], 

爲什麼這個作品:
默認情況下,DEBUG設置爲True(在開發模式下)。在這種模式下,Django不會緩存模板。但在生產模式下(即DEBUG = False),Django啓用模板緩存。因此,需要重新啓動服務器才能重新加載已編輯/已觸摸的模板。

注意:
請注意,通過在生產計算機上禁用模板緩存,您將爲每次通過的請求添加開銷。

0
votes
answers
13 views
+10

Django,匹配查詢不存在

0

我是Django的新手。當我在pycharm運行命令python manage.py runserver,我得到這樣Django,匹配查詢不存在

2017-12-03 05:09:56,952 - INFO - server - Listening on endpoint 
tcp:port=8000:interface=127.0.0.1 
Internal Server Error:/
Traceback (most recent call last): 
File "/Users/mac/anaconda/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in innerresponse = get_response(request) 
File "/Users/mac/anaconda/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request) 
File "/Users/mac/anaconda/lib/python3.6/site-packages/channels/handler.py", line 243, in process_exception_by_middleware 
return super(AsgiHandler,self).process_exception_by_middleware(exception, request) 
File "/Users/mac/anaconda/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Users/mac/PycharmProjects/590/flightmate/webapp/views.py", line 180, in index airlines = RecordSet.objects.get(name="airline") 
File "/Users/mac/anaconda/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method 
return getattr(self.get_queryset(), name)(*args, **kwargs) 
File "/Users/mac/anaconda/lib/python3.6/site-packages/django/db/models/query.py", line 380, in get self.model._meta.object_name 
webapp.models.DoesNotExist: RecordSet matching query does not exist. 

錯誤消息的models.py的代碼是:

from __future__ import unicode_literals 
import uuid 
import datetime 
from django.db import models 

class RecordSet(models.Model): 
name = models.CharField(max_length=512) 
value = models.TextField() 
def __unicode__(self): 
    return "{0}: {1}".format(self.name, self.value) 

models.py的父目錄的目錄webapp。任何建議表示讚賞,謝謝!

+0

您應該在shell中添加錯誤堆棧。 –

沙发
0
0

正如你可以回溯看到,這個問題是這樣的:

airlines = RecordSet.objects.get(name="airline") 

您檢索單個對象與get()並且由於它不存在,它返回DoesNotExist例外。這也是Django文檔在小節Retrieving a single object with get()

明確提到如果沒有結果匹配查詢,獲得()將引發 DoesNotExist例外。此例外是正在執行查詢的 類的一個屬性 - 因此在上面的代碼中,如果 沒有主鍵爲1的Entry對象,則Django將引發 Entry.DoesNotExist。

要麼使用filter()get()try ... except聲明。如果您知道只有一個對象與您的查詢匹配,則應該使用get(),否則使用filter()

0
votes
answers
44 views
+10

python django:登錄辦公室365

1

我想爲Django網站實現office365/azureAD/MS圖形認證系統。python django:登錄辦公室365

我的大學擁有適用於所有學生的office365帳戶系統。如果您使用您的ID登錄,您可以訪問所有MS Office軟件和其他大學系統。

是這樣的: enter image description here

我試圖讓這個學生可以使用這個系統登錄到我的網站。而不是我實現一個用戶/密碼模型和相關的意見等。

我覺得我一直在繞圈。

我很感激任何幫助。

沙发
0
1

您可能可以使用django-social-auth及其AzureAD backend

你需要在AzureAD中register your application。聽起來你需要問你的大學的IT部門爲你做這個部分。

+0

你認爲有可能使用如圖所示的文檔'Google+' 然後谷歌的後端換出的細節,如密鑰和密碼後,如果我能得到的Uni同意註冊我的應用程序? 我還發現似乎做同樣工作的django-allauth軟件包。 –

+0

您可以使用它支持多個後端。一些工作可能會被切斷。您必須能夠以某種方式將Office 365帳戶與其各自的Google帳戶相關聯。 – kichik

0
votes
answers
28 views
+10

如何從django模板路由到視圖中的特定函數?

0

例如我有以下情況,刪除按鈕必須路由不同,具體取決於誰點擊了它,就像他是一個管理員顯示一條消息,否則轉到刪除視圖。我想我會把函數放在詳細的通用視圖中發送消息,但如何直接從模板調用該函數?如何從django模板路由到視圖中的特定函數?

{% if user_detail.status == ADMIN %} 
    <button class="btn clearfix"><i class="icon-trash"></i>Cannot Delete Admin</button> 
{% else %} 
    <a href="{% url "members:delete" userid=user_detail.pk %}" class="btn clearfix"><i class="icon-trash"></i>Delete User</a> 
{% endif %} 

的刪除通用視圖直接連接到該模板,是有顯示重定向到模板之前詳細消息查看本身?

沙发
0
0

有很多解決方案可以做到這一點,其一是檢查視圖中的員工狀態,使用已經爲此創建的multiple mixins之一,或者檢查是否以某種其他方式管理管理員,然後返回錯誤消息或重定向到一個即

def myview(request): 
    if not request.user.is_staff: 
     return HttpResponseRedirect(..errormessage-url or view..) 
    .. do stuff here for admin users..