我正在嘗試在 Django 中制作交易日志應用程式,但遇到了一些障礙。當單擊提交按鈕時,感覺就像我的 post 方法可能會在晚上被呼叫。我嘗試過列印和記錄,但從未在 post() 方法中觸發。日志記錄在 get() 方法中作業正常。此外,即使我正在渲染 trading_log/add-order.html,我也會繼續被路由回我的基本索引頁面。我也嘗試過使用 HTTPResponseRedirect。兩者都無濟于事。我真的不確定我在這一點上做錯了什么。
由于我不確定需要查看哪些檔案,所以我現在將 repo 公開以嘗試獲得一些幫助。如果這不行或不允許,我可以洗掉鏈接。我還附上了下面帖子中要求的相關檔案。回購:https ://github.com/xcasper/caspers_trading_tools
設定.py
"""
Django settings for caspers_trading_tools project.
Generated by 'django-admin startproject' using Django 4.0.1.
For more information on this file, see
https://docs.djangoproject.com/en/4.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.0/ref/settings/
"""
from pathlib import Path
import os
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-d^@mw27((%t$wzj 3eykdmfmweufzep44sgkhib)^n1thdh!y6'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'landing_page',
'trading_log',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'caspers_trading_tools.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
BASE_DIR / "templates",
BASE_DIR / "templates" / "includes"
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'caspers_trading_tools.wsgi.application'
# Database
# https://docs.djangoproject.com/en/4.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# Password validation
# https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/4.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.0/howto/static-files/
STATIC_URL = 'static/'
STATICFILES_DIRS = [
BASE_DIR / "static"
]
# Default primary key field type
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '.\\logs\\tradinglog_log.log',
}
},
'loggers': {
'': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
urls.py(來自根應用程式)
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path("", include("landing_page.urls")),
path("tradinglog/", include("trading_log.urls"))
]
urls.py(來自landing_page 應用程式)
from django.urls import path
from . import views
urlpatterns = [
path("", views.starting_page, name="starting-page"),
]
urls.py(來自 trading_log 應用程式)
from django.urls import path
from . import views
urlpatterns = [
path("", views.trading_log_starting_page, name="trading-log-page"),
path("all-orders", views.OrdersListView.as_view()),
path("all-trades", views.TradesListView.as_view(), name="all-trades-page"),
path("add-order", views.CreateOrderView.as_view(), name="add-order-page"),
path("add-trade", views.CreateTradeView.as_view())
]
視圖.py
from trading_log.forms import CreateOrderForm
from django.shortcuts import render
from django.views.generic import ListView, View
from django.http.response import HttpResponseRedirect
from django.urls import reverse
from django.utils.text import slugify
import logging
import uuid
from .forms import CreateTradeForm
from .models import Trade, Order
# Create your views here.
class TradesListView(ListView):
template_name = "trading_log/all-trades.html"
model = Trade
context_object_name = "trades"
def get_queryset(self):
request = self.request
# this should be removed once user_ids are implemented through Django's built in user registration and login
request.session["user_id"] = 1
user_id = request.session.get("user_id")
filtered_data = super().get_queryset().filter(user_id=user_id)
return filtered_data
class OrdersListView(ListView):
template_name = "trading_log/all-orders.html"
model = Order
context_object_name = "orders"
def get_queryset(self):
request = self.request
# this should be removed once user_ids are implemented through login system and session creation
request.session["user_id"] = 1
user_id = request.session.get("user_id")
filtered_data = super().get_queryset().filter(user_id=user_id)
return filtered_data
# Creates order view
class CreateTradeView(View):
def get(self, request,):
form = CreateTradeForm()
return render(request, "trading_log/add-trade.html", {"form": form})
def post(self, request):
pass
# Creates order view
class CreateOrderView(View):
def get(self, request,):
logging.debug("TEST")
# this should be removed once user_ids are implemented through login system and session creation
request.session["user_id"] = 1
# should be set to session.get("user_id") probably in the future
user_id = request.session.get("user_id")
trade_form = CreateTradeForm()
order_form = CreateOrderForm()
context = {}
context["user_id"] = user_id
context["order_form"] = order_form
context["trade_form"] = trade_form
return render(request, "trading_log/add-order.html", context)
def post(self, request):
logging.debug("DSFSDFSDFSFD")
logging.error("Error test TEST")
logging.critical("Error test TEST 2")
# section commented out to try and resolve the lack of logging in post()
# trade_form = CreateTradeView(request.POST)
# order_form = CreateOrderForm(request.POST)
# trade = trade_form.save(commit=False)
# order = order_form.save(commit=False)
# trade.user_id = request.session.get("user_id")
# trade.setup_id = request.POST.get("setup_id")
# trade.notes = request.POST.get("notes")
# slug = slugify(str(trade.user_id) str(trade.setup_id.name)
# str(order.asset_id.name) uuid.uuid4())
# trade.trade_slug = slugify(slug)
# logging.info("TRADE", trade)
# logging.info("ORDER", order)
# return HttpResponseRedirect(reverse("add-order-page"))
return render(request, "trading_log/add-order.html")
def trading_log_starting_page(request):
all_trades = Trade.objects.all()
return render(request, "trading_log/index.html", {
"all_trades": all_trades
})
表格.py
from django import forms
from django.forms import ModelForm
from .models import Order, Trade
class DateInput(forms.DateTimeInput):
input_type = "datetime-local"
class CreateOrderForm(forms.ModelForm):
class Meta:
model = Order
fields = ['asset_id', 'direction_id', 'num_contracts', 'contract_id', 'order_type_id',
'price', 'datetime', 'time_frame_id', 'chart_screenshot', 'notes', 'trade_id', 'order_slug']
widgets = {
'datetime': DateInput(),
}
labels = {
'asset_id': 'Asset',
'direction_id': 'Direction',
'contract_name_id': 'Contract Name',
'num_contracts': 'Number of Contracts',
'order_type_id': 'Order Type',
'datetime': 'Date Time',
'time_frame_id': 'Time Frame',
'chart_screenshot': 'Chart Screenshot',
}
class CreateTradeForm(forms.ModelForm):
class Meta:
model = Trade
fields = ['setup_id', 'notes']
labels = {
"setup_id": "Setup",
"notes": "Overall Trade Notes"
}
模板:add-order.html
{% extends "base.html" %}
{% load static %}
{% block title %}Add Order{% endblock %}
{% block css_files %}
{% endblock %}
{% block content %}
<form action="/" type="submit" method="post">
{% csrf_token %}
{% for field in order_form %}
<div class="form-control {% if field.errors %}errors{% endif %}" >
{{ field.label_tag }}
{{ field }}
{{ field.errors }}
</div>
{% endfor %}
{% for field in trade_form %}
<div class="form-control {% if field.errors %}errors{% endif %}" >
{{ field.label_tag }}
{{ field }}
{{ field.errors }}
</div>
{% endfor %}
<button>Send</button>
</form>
{% endblock %}
uj5u.com熱心網友回復:
您的表單正在重定向到您的索引頁面,因為這就是您在
<form action="/" type="submit" method="post">
/轉到您的索引頁面。嘗試將其更改為:
<form action="#" type="submit" method="post">
# 會將其帶到當前頁面。表單action告訴您要將表單資料發送到哪個視圖。# 基本上僅表示您所在的當前頁面。如果您想將資料發送到另一個視圖,您只需執行<form action='{% url 'name_of_your_view' %} ...>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/418250.html
標籤:
下一篇:如何從元組串列中僅提取數字
