Can Flask support an optional parameter in a POST request?












0















In the application, the user has a choice to upload a picture or not. But



    picture_url = request.files['image']


seems to cause the page to stop loading the request if no such file exists. Is there any way to make this optional?



Thanks










share|improve this question



























    0















    In the application, the user has a choice to upload a picture or not. But



        picture_url = request.files['image']


    seems to cause the page to stop loading the request if no such file exists. Is there any way to make this optional?



    Thanks










    share|improve this question

























      0












      0








      0








      In the application, the user has a choice to upload a picture or not. But



          picture_url = request.files['image']


      seems to cause the page to stop loading the request if no such file exists. Is there any way to make this optional?



      Thanks










      share|improve this question














      In the application, the user has a choice to upload a picture or not. But



          picture_url = request.files['image']


      seems to cause the page to stop loading the request if no such file exists. Is there any way to make this optional?



      Thanks







      python post flask






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jul 2 '14 at 18:22









      UtsavShahUtsavShah

      617615




      617615
























          1 Answer
          1






          active

          oldest

          votes


















          4














          You are using syntax that throws an exception if the key is not present. Use .get() instead:



          picture_url = request.files.get('image')


          This returns None if the key was not set, e.g. no image field is present in the POST.



          You could also handle the KeyError exception:



          try:
          picture_url = request.files['image']
          except KeyError:
          # no picture uploaded, do something else perhaps





          share|improve this answer
























          • Just a quick question. This might seem stupid but what is the scope of the picture_url in the second example? Will it be available to the entire function? Considering without the try it is inside the function body

            – UtsavShah
            Jul 2 '14 at 18:31













          • @UtsavShah: it'll be available if no exception was thrown, in the rest of the function. You'd have to bind it in the exception handler too, or set a default before the try. In this regard it is no different from binding a name in a if handler.

            – Martijn Pieters
            Jul 2 '14 at 18:36











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f24538366%2fcan-flask-support-an-optional-parameter-in-a-post-request%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          4














          You are using syntax that throws an exception if the key is not present. Use .get() instead:



          picture_url = request.files.get('image')


          This returns None if the key was not set, e.g. no image field is present in the POST.



          You could also handle the KeyError exception:



          try:
          picture_url = request.files['image']
          except KeyError:
          # no picture uploaded, do something else perhaps





          share|improve this answer
























          • Just a quick question. This might seem stupid but what is the scope of the picture_url in the second example? Will it be available to the entire function? Considering without the try it is inside the function body

            – UtsavShah
            Jul 2 '14 at 18:31













          • @UtsavShah: it'll be available if no exception was thrown, in the rest of the function. You'd have to bind it in the exception handler too, or set a default before the try. In this regard it is no different from binding a name in a if handler.

            – Martijn Pieters
            Jul 2 '14 at 18:36
















          4














          You are using syntax that throws an exception if the key is not present. Use .get() instead:



          picture_url = request.files.get('image')


          This returns None if the key was not set, e.g. no image field is present in the POST.



          You could also handle the KeyError exception:



          try:
          picture_url = request.files['image']
          except KeyError:
          # no picture uploaded, do something else perhaps





          share|improve this answer
























          • Just a quick question. This might seem stupid but what is the scope of the picture_url in the second example? Will it be available to the entire function? Considering without the try it is inside the function body

            – UtsavShah
            Jul 2 '14 at 18:31













          • @UtsavShah: it'll be available if no exception was thrown, in the rest of the function. You'd have to bind it in the exception handler too, or set a default before the try. In this regard it is no different from binding a name in a if handler.

            – Martijn Pieters
            Jul 2 '14 at 18:36














          4












          4








          4







          You are using syntax that throws an exception if the key is not present. Use .get() instead:



          picture_url = request.files.get('image')


          This returns None if the key was not set, e.g. no image field is present in the POST.



          You could also handle the KeyError exception:



          try:
          picture_url = request.files['image']
          except KeyError:
          # no picture uploaded, do something else perhaps





          share|improve this answer













          You are using syntax that throws an exception if the key is not present. Use .get() instead:



          picture_url = request.files.get('image')


          This returns None if the key was not set, e.g. no image field is present in the POST.



          You could also handle the KeyError exception:



          try:
          picture_url = request.files['image']
          except KeyError:
          # no picture uploaded, do something else perhaps






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Jul 2 '14 at 18:24









          Martijn PietersMartijn Pieters

          711k13724812301




          711k13724812301













          • Just a quick question. This might seem stupid but what is the scope of the picture_url in the second example? Will it be available to the entire function? Considering without the try it is inside the function body

            – UtsavShah
            Jul 2 '14 at 18:31













          • @UtsavShah: it'll be available if no exception was thrown, in the rest of the function. You'd have to bind it in the exception handler too, or set a default before the try. In this regard it is no different from binding a name in a if handler.

            – Martijn Pieters
            Jul 2 '14 at 18:36



















          • Just a quick question. This might seem stupid but what is the scope of the picture_url in the second example? Will it be available to the entire function? Considering without the try it is inside the function body

            – UtsavShah
            Jul 2 '14 at 18:31













          • @UtsavShah: it'll be available if no exception was thrown, in the rest of the function. You'd have to bind it in the exception handler too, or set a default before the try. In this regard it is no different from binding a name in a if handler.

            – Martijn Pieters
            Jul 2 '14 at 18:36

















          Just a quick question. This might seem stupid but what is the scope of the picture_url in the second example? Will it be available to the entire function? Considering without the try it is inside the function body

          – UtsavShah
          Jul 2 '14 at 18:31







          Just a quick question. This might seem stupid but what is the scope of the picture_url in the second example? Will it be available to the entire function? Considering without the try it is inside the function body

          – UtsavShah
          Jul 2 '14 at 18:31















          @UtsavShah: it'll be available if no exception was thrown, in the rest of the function. You'd have to bind it in the exception handler too, or set a default before the try. In this regard it is no different from binding a name in a if handler.

          – Martijn Pieters
          Jul 2 '14 at 18:36





          @UtsavShah: it'll be available if no exception was thrown, in the rest of the function. You'd have to bind it in the exception handler too, or set a default before the try. In this regard it is no different from binding a name in a if handler.

          – Martijn Pieters
          Jul 2 '14 at 18:36




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f24538366%2fcan-flask-support-an-optional-parameter-in-a-post-request%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Liquibase includeAll doesn't find base path

          How to use setInterval in EJS file?

          Petrus Granier-Deferre