من از https://django-simple-captcha.readthedocs.io/en/latest/usage.html
اینجا رفتم اموزش اضافه کردن captcha رو اضافه کردم ولی نشد چکار کنم
با سلام.
لطفاً کدهای خود و همچنین پیام های خطای احتمالی را جهت بررسی بیشتر ارسال کنید.
from captcha.fields import CaptchaField
class RegisterForm(forms.Form):
captcha = CaptchaField()INSTALLED_APPS = [
...,
'captcha'
] <div class="container">
<section id="form"><!--form-->
<div class="row">
<div class="col-sm-6 col-md-offset-3">
<div class="signup-form"><!--sign up form-->
<h2>ثبت نام کاربـر جدیـد</h2>
<form action="{% url 'register_view' %}" method="post">
{% csrf_token %}
{{ register_form }}
{{ register_form.captcha }}
{% comment %}<input type="text" placeholder="نام کاربـری">
<input type="email" placeholder="آدرس ایمیـل">
<input type="password" placeholder="رمـز عبـور">{% endcomment %}
<button type="submit" class="btn btn-default">ثبت نام</button>
</form>
</div><!--/sign up form-->
</div>
</div>
</section>
</div>و یک چیز دیگه چرا وقتی من پرداخت رو میزنم دیگه هیچ پیغامی نمیاره و داخل خرید های قبلی هم نمیاد
چک کنید که URL های Captcha به URL های root اضافه شده باشد.
دستور migrate نیز باید اجرا شده و Pillow هم نصب شده باشد.
سایر فیلدهای فرم را تعریف کردید؟ ( در فایل forms ندیدم )
پیغام خطایی که در هنگام submit کردن فرم دریافت می کنید چیست؟
و یک چیز دیگه چرا وقتی من پرداخت رو میزنم دیگه هیچ پیغامی نمیاره و داخل خرید های قبلی هم نمیاد
باید کدهای خود را ارسال کنید تا پس از بررسی بیشتر بتوان نظر داد. در بخش های مختلف کدهای خود، Breakpoint بگذارید و مقادیر پارامترها را چک کنید یا از دستور Print یا console.log بر حسب اینکه در Pycharm یا در Browser می خواهید تست هایی انجام دهید، استفاده کنید.
تمام پیامهای خطا یا مقادیر خروجی را به همراه کدهای خود ارسال کنید.
سلام دوست من
به جای این مورد از پکیج django-recaptcha استفاده کنین
کار با این مورد به شدت راحت هستش و بهتر میتونین فرم ها رو مدیریت کنین
کد view order
@login_required
def send_request(request):
current_order, created = Order.objects.get_or_create(is_paid=False, user_id=request.user.id)
total_price = current_order.calculate_total_price()
if total_price == 0:
return redirect(reverse('user_basket_page'))
req_data = {
"merchant_id": MERCHANT,
"amount": total_price * 10,
"callback_url": CallbackURL,
"description": description,
# "metadata": {"mobile": mobile, "email": user.email}
}
req_header = {"accept": "application/json",
"content-type": "application/json'"}
req = requests.post(url=ZP_API_REQUEST, data=json.dumps(
req_data), headers=req_header)
authority = req.json()['data']['authority']
if len(req.json()['errors']) == 0:
return redirect(ZP_API_STARTPAY.format(authority=authority))
else:
e_code = req.json()['errors']['code']
e_message = req.json()['errors']['message']
return HttpResponse(f"Error code: {e_code}, Error Message: {e_message}")
@login_required
def verify(request):
current_order, created = Order.objects.get_or_create(is_paid=False, user_id=request.user.id)
order_detail_final = OrderDetail.objects.filter(order__is_paid=False, order__user_id=request.user.id)
total_price = current_order.calculate_total_price()
t_authority = request.GET['Authority']
if request.GET.get('Status') == 'OK':
req_header = {"accept": "application/json",
"content-type": "application/json'"}
req_data = {
"merchant_id": MERCHANT,
"amount": total_price * 10,
"authority": t_authority
}
req = requests.post(url=ZP_API_VERIFY, data=json.dumps(req_data), headers=req_header)
if len(req.json()['errors']) == 0:
t_status = req.json()['data']['code']
if t_status == 100:
current_order.is_paid = True
current_order.payment_date = time.time()
order_detail_final.final_price = total_price
current_order.save()
order_detail_final.save()
req_result = req.json()['data']['ref_id']
context = {
'success': req_result
}
return render(request, 'order_module/payment_result.html',context)
elif t_status == 101:
return render(request, 'order_module/payment_result.html', {
'info': f'این تراکنش قبلا ثبت شده است'
})
else:
return render(request, 'order_module/payment_result.html', {
'error': str(req.json()['data']['message'])
})
else:
e_code = req.json()['errors']['code']
e_message = req.json()['errors']['message']
# return HttpResponse(f"Error code: {e_code}, Error Message: {e_message}")
return render(request, 'order_module/payment_result.html', {
'error': e_message
})
else:
return render(request, 'order_module/payment_result.html', {
'error': 'پرداخت با خطا مواجه شد'
})
خطا


لطفا جواب بدین
این خطا هایی که فرستادم بعد پرداخته وقتی پرداخت کردم مقدار پول کم هم میشه ولی اینجا خطا میده
سلام خط 121
order_detail_final.save()
این رو به این تغییر بده
order_detail_final.first().save()خط 118 ام به این
current_order.payment_date = datetime.date.today()
بالا هم datetime رو ایمپورت کن
import datetime
نه این روی
current_order.save()گیر میده
سلام خط 121
order_detail_final.save()این رو به این تغییر بده
order_detail_final.first().save()
شما که اینو گفتی این دفعه یک خطا دیگه میده اون خط 118 درست شد حالا رفت خط 121
اینم خطاش
'NoneType' object has no attribute 'save'
سلام که اینطور دو خط زیر def verify
order_detail_final = OrderDetail.objects.filter(order__is_paid=False, order__user_id=request.user.id)این رو به این تغییر بده ببین درست میشه
order_detail_final = OrderDetail.objects.filter(order__is_paid=False, order__user_id=request.user.id).first()بعد اون قبلیم بکن همون
order_detail_final.save()
سلام نه درست نشد
یکاری کن first() رو از
order_detail_final = OrderDetail.objects.filter(order__is_paid=False, order__user_id=request.user.id).first()حذف کن اون پایین باید loop بزنی
اونجا که نوشتی
order_detail_final.final_price = total_price
order_detail_final.save()تغییر بده به این ببین چی میشه
for order in order_detail_final.all:
order.final_price = total_price
order.save()
اینطوری کردم وقتی می رم داخل درگاه پرداخت کلا خطا میده
for order in order_detail_final.all():
order.final_price = total_price
order.save()ببخشید :( فکر کنم خطا بخاطر پرانتزا بود
نه این دفعه هم کار نکرد
میشه بپرسم اصلا چرا از
order_detail_final.final_price = total_price
order_detail_final.save()استفاده میکنید میخواین قیمت محصول تو جزئیات سفارش بعد تغییر قیمت محصول تغییر نکنه؟
یه کار دیگه ام مونده که اگه اینم جواب نداد ببخشید نهایت تلاشم همینه 😢
order_detail_final = OrderDetail.objects.filter(order__is_paid=False, order__user_id=request.user.id)
این رو اینجوری بنویس فکر کنم بخاطر filter is paid که پایین قبلforloop تغییر داده شده به True به مشکل خورده
details = current_order.orderdetail_set.all()
loop ام بزار همون بمونه
من می خوام وقتی خرید کردم مقدار final_price تغییر کنه ولی همون طوری خالی میمونه
درست نشد
final price برای موقعیه که به سبد خرید اضافه میکنی هست اونو باید موقع اضافه کردن به سبد خرید ست کنی اگه پروژت طبق دوره هست برو فایل ordermodule/views.py (قسمت view اضافه کردن به سبد خرید)
new_detail = OrderDetail(order_id=current_order.id, product_id=product_id, count=count)
new_detail.save()اینجا باید final price هم ست کنی که به این صورت
new_detail = OrderDetail(order_id=current_order.id, product_id=product_id, count=count,final_price=product.price)
new_detail.save()البته اگه کدات مشابه دورس اگه نیست که موقع اضافه کردن به سبد خرید محصولو میگیری دیگه تو new detail , final price رو قیمت محصول قرار بده
خوب من می خوام وقتی خرید انجام شد final_price اضافه بشه که دیگه وقتی قیمت تغییر کرد در قسمت خرید های قبلی تغییر نکنه
خب اینجا تو حلقه for
for order in order_detail_final.all():
order.final_price = total_price
order.save()بجا اینکه final رو با total قرار بدی باید با قیمت محصول قرار بدی total قیمت کل سبد خرید هست
for order in order_detail_final.all():
order.final_price = order.product.price
order.save()خیلی خیلی ممنون درست شد
😉خوشحال شدم ببخشید اگه طول کشید
موفق باشین
خوشحالم که مشکلتون برطرف شد
ممنونم از اقای اکبری بابت راهنمایی که کردن
موفق باشین :)