• 1401/07/28

ایجاد captcha :

من از https://django-simple-captcha.readthedocs.io/en/latest/usage.html

اینجا رفتم اموزش اضافه کردن captcha رو اضافه کردم ولی نشد چکار کنم

 

  • 1401/07/28
  • ساعت 22:05

با سلام.

 

لطفاً کدهای خود و همچنین پیام های خطای احتمالی را جهت بررسی بیشتر ارسال کنید.


  • 1401/07/28
  • ساعت 22:27
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>

  • 1401/07/29
  • ساعت 10:22

و یک چیز دیگه چرا وقتی من پرداخت رو میزنم دیگه هیچ پیغامی نمیاره و داخل خرید های قبلی هم نمیاد


  • 1401/07/29
  • ساعت 19:40

چک کنید که URL های Captcha به URL های root اضافه شده باشد.

دستور migrate نیز باید اجرا شده و Pillow هم نصب شده باشد.

سایر فیلدهای فرم را تعریف کردید؟ ( در فایل forms ندیدم )

 

پیغام خطایی که در هنگام submit کردن فرم دریافت می کنید چیست؟

 

و یک چیز دیگه چرا وقتی من پرداخت رو میزنم دیگه هیچ پیغامی نمیاره و داخل خرید های قبلی هم نمیاد

باید کدهای خود را ارسال کنید تا پس از بررسی بیشتر بتوان نظر داد. در بخش های مختلف کدهای خود، Breakpoint بگذارید و مقادیر پارامترها را چک کنید یا از دستور Print یا console.log بر حسب اینکه در Pycharm یا در Browser می خواهید تست هایی انجام دهید، استفاده کنید.

تمام پیامهای خطا یا مقادیر خروجی را به همراه کدهای خود ارسال کنید.


  • 1401/07/29
  • ساعت 22:14

سلام دوست من

به جای این مورد از پکیج django-recaptcha استفاده کنین

کار با این مورد به شدت راحت هستش و بهتر میتونین فرم ها رو مدیریت کنین


  • 1401/07/30
  • ساعت 14:35

کد 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': 'پرداخت با خطا مواجه شد'
        })

خطا


  • 1401/07/30
  • ساعت 17:39

  • 1401/07/30
  • ساعت 17:40

لطفا جواب بدین 


  • 1401/07/30
  • ساعت 18:10

این خطا هایی که فرستادم بعد پرداخته وقتی پرداخت کردم مقدار پول کم هم میشه ولی اینجا خطا میده


  • 1401/07/30
  • ساعت 18:50

سلام خط 121 

                order_detail_final.save()

این رو به این تغییر بده 

                order_detail_final.first().save()

خط 118 ام به این

                current_order.payment_date = datetime.date.today()

بالا هم datetime رو ایمپورت کن

import datetime

 


  • 1401/07/30
  • ساعت 19:10

نه این روی 

current_order.save()

گیر میده


  • 1401/07/30
  • ساعت 19:16

سلام خط 121 

                order_detail_final.save()

این رو به این تغییر بده 

                order_detail_final.first().save()

شما که اینو گفتی این دفعه یک خطا دیگه میده اون خط 118 درست شد حالا رفت خط 121

اینم خطاش

'NoneType' object has no attribute 'save'
 


  • 1401/07/30
  • ساعت 19:24

سلام که اینطور دو خط زیر 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()

  • 1401/07/30
  • ساعت 19:48

سلام نه درست نشد


  • 1401/07/30
  • ساعت 20:00

یکاری کن 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()

 


  • 1401/07/30
  • ساعت 20:23

اینطوری کردم وقتی می رم داخل درگاه پرداخت کلا خطا میده


  • 1401/07/30
  • ساعت 20:37
for order in order_detail_final.all():
	order.final_price = total_price
	order.save()

ببخشید :( فکر کنم خطا بخاطر پرانتزا بود


  • 1401/07/30
  • ساعت 20:43

نه این دفعه هم کار نکرد


  • 1401/07/30
  • ساعت 20:50

میشه بپرسم اصلا چرا از

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 ام بزار همون بمونه 


  • 1401/08/01
  • ساعت 15:55

من می خوام وقتی خرید کردم مقدار final_price تغییر کنه ولی همون طوری خالی میمونه


  • 1401/08/01
  • ساعت 16:15

درست نشد

 


  • 1401/08/01
  • ساعت 16:22

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 رو قیمت محصول قرار بده 

 


  • 1401/08/01
  • ساعت 17:28

خوب من می خوام وقتی خرید انجام شد final_price اضافه بشه که دیگه وقتی قیمت تغییر کرد در قسمت خرید های قبلی تغییر نکنه


  • 1401/08/01
  • ساعت 17:47

خب اینجا تو حلقه 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()

  • 1401/08/01
  • ساعت 18:13

خیلی خیلی ممنون درست شد 


  • 1401/08/01
  • ساعت 18:21

😉خوشحال شدم ببخشید اگه طول کشید 
موفق باشین


  • 1401/08/02
  • ساعت 07:46

خوشحالم که مشکلتون برطرف شد

ممنونم از اقای اکبری بابت راهنمایی که کردن

موفق باشین :)


logo-enamadlogo-samandehi