2 सवाल: फ्लास्क त्रुटि: विशेषता: 'कोई नहीं' ऑब्जेक्ट में कोई विशेषता नहीं है 'प्राप्त करें'

पर बनाया गया सवाल Sat, Mar 23, 2019 12:00 AM

मैं आरामदायक API विकसित करने के लिए फ्लास्क का उपयोग कर रहा हूं। मैं /api /उपयोगकर्ताओं के पथ का परीक्षण करने के लिए बहुत से मामले लिख रहा हूं। परीक्षण करते समय मुझे नीचे त्रुटि हो रही है। मैं SQL कीमिया का उपयोग कर रहा हूँ। मैं फ्लास्क के लिए अपेक्षाकृत नया हूं। किसी भी मदद की बहुत सराहना की जाएगी

फ्लास्क एपीआई:

@app.route('/api/users', methods=['POST'])
def new_user():
    username = request.json.get('username')
    password = request.json.get('password')
    user = User(username = username)
    user.hash_password(password)
    db.session.add(user)
    db.session.commit()
    return ("user")

Pytest केस:

@pytest.fixture
def client():
    db_fd, app.config['DATABASE'] = tempfile.mkstemp()
    app.config['TESTING'] = True
    client = app.test_client()

    yield client

    os.close(db_fd)
    os.unlink(app.config['DATABASE'])

@pytest.fixture
def user():
    return {
    'username': 'test_username',
    'password': 'test_password',
    'email': 'test_email'
    }



def _new_user(client, user):
    return client.post('/api/users', json.dumps(user))


# REGISTER USER
def test_new_user(client, user):
    res = _new_user(client, user)

    assert res.status_code == 201
    assert 'user' in json.loads(res.get_data())

जब मैं परीक्षण मामले को चलाता हूं तो मुझे नीचे त्रुटि मिलती है

    @app.route('/api/users', methods=['POST'])
    def new_user():
>       username = request.json.get('username')
E       AttributeError: 'NoneType' object has no attribute 'get'

apa/routes.py:20: AttributeError
    
0
2 उत्तर                              2                         

समस्या यह है कि आप json को कैसे पोस्ट कर रहे हैं। आपको इस पंक्ति को संशोधित करने की आवश्यकता है:

def _new_user(client, user):
    return client.post('/api/users', json.dumps(user))

होना:

def _new_user(client, user):
    return client.post('/api/users', json=json.dumps(user))

यदि आप एक तर्क के रूप में जौन को निर्दिष्ट नहीं करते हैं, तो वह request.data में request.json. के बजाय 0600350991100101035062 में डाल दिया जाता है।

सामान्य तौर पर, यदि आप एपीआई से पोस्ट किए गए json से कुंजी प्राप्त करने का प्रयास कर रहे हैं, तो यह एक अच्छा विचार है कि आप कोशिश में लपेटें /सिवाय इसके कि आपको सर्वर 500 त्रुटि मिलेगी यदि कुंजी मौजूद नहीं है या नहीं जसन तैनात थे। वेब APIs के साथ, क्लाइंट को एक प्रतिक्रिया वापस करने में सक्षम होना वांछनीय है, भले ही पोस्ट विकृत हो, जो अधिक जटिल एपीआई और डीबगिंग के साथ मदद करता है।

    
1
2019-03-23 ​​22: 45: 53Z

मुझे लगता है कि आपको request.get_json () विधि का उपयोग करना चाहिए।

अधिक विवरण के लिए इसे देखें request.get_json

    
0
2019-03-23 ​​19: 53: 42Z
  1. ओकी। जब मैं पोस्टमैन का परीक्षण करने के लिए एपीआई का उपयोग करता हूं तो एपीआई ठीक काम करता है। क्या मुझे अनुरोध.गेट_जसन () का उपयोग करना चाहिए?
    2019-03-23 ​​20: 02: 05Z
  2. हाँ, उपयोग करने का प्रयास करें: try: username = request.json_get('username') except: #other stuff
    2019-03-23 ​​20: 18: 08Z
  3. मैंने इसे request.get_son () प्राप्त करें ('उपयोगकर्ता नाम') का उपयोग करके ठीक किया। लेकिन फिर भी वही मुद्दा। @ app.route ('/api /users', मेथड्स [['POST']) new_user (): > उपयोगकर्ता नाम = request.get_json ()। get ('यूज़रनेम') E AttributeError: 'noneType' ऑब्जेक्ट में कोई विशेषता नहीं है 'get' apa /path.py: 22: AttributeError
    2019-03-23 ​​21: 10: 58Z
स्रोत रखा गया यहाँ