2017-08-03 17 views
1

私は入力としてURLを必要とするフォームを持っています。 URLがhttp://またはhttps://で始まるかどうか確認したいと思います。Djangoフォームフィールドの検証

最初に2つの「スティンガー」のいずれかがない場合は、フォーム提出でエラーが発生するはずです。

私はこの方法を開始する手がかりがなく、私の限られたdjangoの知識に基づいて情報を見つけることができませんでしたし、検索用語を調べる手がかりがありません。

基本的なヒントは大きな助けになります。

ありがとうございます!

class AddUrlForm(forms.ModelForm): 

    class Meta: 
     model = forwards 
     # fields = '__all__' 
     exclude = ["user", "counterA", "counterB", "shortcodeurl", "uniqueid"] 

models.py:

class forwards(models.Model): 
    uniqueid = models.AutoField(primary_key=True) 
    user = models.CharField(max_length = 150) 
    urlA = models.CharField(verbose_name="URL Version A", max_length = 254) 
    counterA = models.DecimalField(max_digits=19, decimal_places=0,default=Decimal('0')) 
    urlB = models.CharField(verbose_name="URL Version B",max_length = 254) 
    counterB = models.DecimalField(max_digits=19, decimal_places=0,default=Decimal('0')) 
    timestamp = models.DateTimeField('date created', auto_now_add=True) 
    shortcodeurl = models.CharField(max_length = 254) 

HTMLセグメントすなわちフォームが統合されている例を示します。

 <form method="post"> 
      {% csrf_token %} 
      {% for field in forwardform %} 
       <span>{{ field.label_tag }} </span> 
       <p style="color: black">{{ field }} </p> 
       {% for error in field.errors %} 
         <p style="color: red">{{ error }}</p> 
       {% endfor %} 
      {% endfor %} 
     <button class="btn btn-outline btn-xl type="submit">Generate URL</button> 
     </form> 

私の現在forms.pyは、モデルに基づく形状を有します

views.py:

def forwardthis(request): 
    forwardform = AddUrlForm(request.POST or None) 
    if forwardform.is_valid(): 
     forward = forwardform.save(commit=False) 
     forward.user = request.user.username 
     forward = forwardform.save() 
     uniqueid_local = forward.uniqueid 
     uniqueid_local_bytes = uniqueid_local.to_bytes((uniqueid_local.bit_length() + 7) // 8, byteorder='little') 
     shortcodeurl_local = urlsafe_base64_encode(uniqueid_local_bytes) 
     forward.shortcodeurl = shortcodeurl_local 
     forward.save() 
     return HttpResponseRedirect('/forwardthis') 
    query_results = forwards.objects.filter(user=request.user.username) 
    query_results_qty = query_results.count() 
    click_results = clickstats.objects.filter(user=request.user.username) 
    template = loader.get_template('forwardthis.html') 
    context = { 
     'forwardform': forwardform , 
     'query_results':query_results, 
     'query_results_qty': query_results_qty 
    } 
    return HttpResponse(template.render(context,request)) 

答えて

0

フォームフィールドごとに検証方法を作成できます。 def clean_FIELDNAME()。私は、URLフィールドは、shortcodeurlです

+1

魅力的なように働いています。 'is_valid_url'関数を定義するのにいくつかの問題がありましたが、エラーを呼び出すために別の関数を使う代わりにロジック' shortcodeurl.startswith( "http://"): 'を真っ直ぐに入れました。 – radzia2

関連する問題