page is not opening by giving url django - python

I am unable to show purchasing template by writing URL "localhost:8000/purchasing" on browser. I am beginner here.
projectforms
urls.py
bookingform
urls.py
views.py
projectforms.urls
from django.contrib import admin
from django.urls import path, include
from django.conf.urls import include, url
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('bookingform.urls')),
path('purchasing/', include('bookingform.urls')),
]
bookingform.urls
from django.urls import path
from . import views
urlpatterns = [
path('',views.add_model),
path(r'^purchasing/',views.purchasing_view,name="purchasing"),
]
This is the view. I have defined two functions in it.
bookingform.views
def add_model(request):
if request.method == "POST":
form = Form(request.POST)
if form.is_valid():
form.save()
messages.success(request, 'Booking Saved')
# return redirect('/')
return render(request, "template.html", {'form': form})
else:
form = Form()
# purchaing = purchasing.objects.all()
return render(request,"template.html",{'form': form})
def purchasing_view(request):
if request.method == "POST":
purchasing_form = purchasingform(request.POST)
if purchasing_form.is_valid():
purchasing_form.save()
messages.success(request, 'Purchaing Record Saved')
# return redirect('/')
return render(request, "purchasing.html", {'purchasing_form':
purchasing_form})
else:
purchasing_form = purchasing()
# purchaing = purchasing.objects.all()
return render(request, "purchaing.html", {'purchasing_form':
purchasing_form})

Let's assume that you want to have the following URL's
localhost:8000 -> which maps to the add_model
localhost:8000/purchasing -> which maps to the purchasing_view
For this in projectforms.urls you need:
from bookingform.views import add_model, purchasing_view
urlpatterns = [
path('admin/', admin.site.urls),
path('', add_model),
path('purchasing', purchasing_view),
]

Related

Django: Reverse for '<WSGIRequest: GET '/index/'>' not found. '<WSGIRequest: GET '/index/'>' is not a valid view function or pattern name

I am getting the above error when i tried to redirect from my UserAuth app to UserArea app.
It says 'NoReverseMatch at /index/'.
UserAuth/views.py
def loginUser(request):
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# return render(request, 'home.html')
return redirect('nsUserArea:urlUserHome')
else:
messages.info(request, 'User name or password is incorrect')
return render(request, "Login.html")
USerAuth/urls.py
urlpatterns = [
path('', views.loginUser, name="urllogin"),
path('logout/', views.logoutUser, name="urllogout"),
path('register/', views.register, name="urlregister"),
path('home/', views.home, name="urlhome"),
]
UserArea/urls.py
urlpatterns = [
path('', views.IndexPage, name="urlUserHome"),
]
My main project urls.py file is this:
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('UserAuth.urls', namespace="nsUserAuth")),
path('index/', include('UserArea.urls', namespace="nsUserArea")),
]
UserArea/views.py
def IndexPage(request):
return redirect(request, 'home.html')
home.html
<h1>Home</h1>
I was also getting the same problem that you are getting:
I modified my redirect to render.
Change
return redirect()
to
return render()
def IndexPage(request):
return redirect(request, 'home.html')
Try without request
def IndexPage(request):
return redirect('home.html')

Reverse for 'send_form' with no arguments not found. 1 pattern(s) tried: [u'app/send_message/(?P<flag>\\d+)/$']

I am trying to build a form to be used in 2 pages (index and contact).
Once the form performs method post, it will bring a page either success or failed (simple html page with few words).
I am stuck due to the error shown above and I’m still new in using Django.
Appreciate any help. Thank you
urls.py
from django.conf.urls import url
from django.conf.urls import include
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app/', include('app.urls'))
]
app/url.py
from .views import *
app_name = "app"
urlpatterns = [
url(r'^home/$', home, name='home'),
url(r'^contact/$', contact, name='contact'),
url(r'^send_message/(?P<flag>\d+)/$', send_form, name='send_form'),
url(r'^send_message/success/$', success, name='success'),
url(r'^send_message/failed/$', failed , name='failed'),
]
views.py
from django.core.mail import send_mail
from .forms import MessagesForm
from django.conf import settings
rom django.shortcuts import render, redirect
def home(request):
empty_form = send_form(request)
cover_title = PageServiceCover.objects.latest('id').title
cover_text = PageServiceCover.objects.latest('id').text
context = {'cover_title': cover_title, 'cover_text': cover_text,'form':empty_form}
return render(request, 'index.html', context)
def send_form(request):
if request.method == 'POST':
form = MessagesForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
email = form.cleaned_data['email']
phone = form.cleaned_data['phone']
category = form.cleaned_data['category']
text = form.cleaned_data['text']
form.save()
subject=[name, phone, category]
send_mail(subject, text, email, [settings.EMAIL_HOST_USER], fail_silently=False)
return redirect('thanks', flag='success' )
else:
return redirect('not_working', flag='failed')
def success(request):
return render(request, 'thanks.html')
def failed(request):
return render(request, 'notworking.html')
index.html
<form action="{% url 'app:send_form' %}" method="POST" target="_blank">
{%csrf_token%}
{{form.as_p}}
<button type="submit"> Send Message </button>
</form>
Your url need a flag
url(r'^send_message/(?P<flag>\d+)/$', send_form, name='send_form'),
change view and pass flag from template
def send_form(request, flag):
if request.method == 'POST':
form = MessagesForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
email = form.cleaned_data['email']
phone = form.cleaned_data['phone']
category = form.cleaned_data['category']
text = form.cleaned_data['text']
form.save()
subject=[name, phone, category]
send_mail(subject, text, email, [settings.EMAIL_HOST_USER], fail_silently=False)
return redirect('thanks', flag='success' )
else:
return redirect('not_working', flag='failed')

How to pass field from submitted form into url in Django?

I am trying to submit a form, save to database and then show the cleaned_data on a new url. In the form I have a field called job_number. I would like to send the cleaned_data over to 127.0.0.1:8000/quotes/job_number
quote/views.py:
#login_required
def quote_view(request):
data_form = QuoteInformationForm()
if request.method == "POST":
data_form = QuoteInformationForm(request.POST)
if data_form.is_valid():
data_form.save(commit=True)
return redirect('quote')
else:
print('Error')
return render(request, "index.html", {'data_form': data_form})
#login_required
def submitted_quote(request):
return render(request, "quote.html")
urls.py:
urlpatterns = [
path('home/', quote_view, name='home'),
path('quote/', submitted_quote, name='quote'),
Currently all this does is open the form at http://127.0.0.1:8000/home/ using index.html. When I submit it will send the info to the database and redirect me to http://127.0.0.1:8000/quotes. This is fine. Now I just need to show the cleaned data on this url and change the url to include the job_number at the end. How can I do this?
you need to change url pattern like this:
urlpatterns = [
path('home/', quote_view, name='home'),
path('quote/<int:job_number>/', submitted_quote, name='quote'),
]
and submitted_quotes():
#login_required
def submitted_quote(request,job_number):
job = # Get Your job
return render(request, "quote.html", {"job":job})
and :
#login_required
def quote_view(request):
data_form = QuoteInformationForm()
if request.method == "POST":
data_form = QuoteInformationForm(request.POST)
if data_form.is_valid():
data_form.save(commit=True)
return redirect('quote{}'.format(data_form.id))
else:
print('Error')
return render(request, "index.html", {'data_form': data_form})

__init__() takes 1 positional argument but 2 were given django email activation

please help so solve my problem, when i open the activation link in email, then it will show init() takes 1 positional argument but 2 were given, help
this is my signup views
def signup(request):
if request.method == 'POST':
user_form = UserCreationForm(request.POST)
profile_form = ProfileForm(request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save(commit=False)
profile = profile_form.save(commit=False)
user.is_active = False
user.save()
profile.save()
uidb64 = urlsafe_base64_encode(force_bytes(user.pk))
domain = get_current_site(request).domain
link=reverse('activate', kwargs={
'uidb64': uidb64, 'token': token_generator.make_token(user)})
activate_url = 'http://'+domain+link
email_body = 'Hallo '+user.username + 'Tolong gunakan link ini untuk verifikasi akun anda\n' +activate_url
email_subject = 'Aktivasi Akun Anda'
email = EmailMessage(
email_subject,
email_body,
'noreply#kantorkecamatanbintanutara.com',
[profile.email],
)
email.send(fail_silently=False)
return redirect('/pengurusan/signin')
else:
return render(request, 'pengurusan/register.html', {
'user_form': user_form,
'profile_form': profile_form
})
this is my verification view
class VerificationView(View):
def get(self, request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
if not token_generator.check_token(self, user, token):
return redirect('pengurusan/signup'+'?message'+'User already activated')
if user.is_active:
return redirect('pengurusan/signin')
user.is_active = True
user.save()
messages.success(request, 'Account activated successfully')
return redirect('pengurusan/signup')
except Exception as ex:
pass
return redirect('pengurusan/signin')
this is my utils.py
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from six import text_type
class AppTokenGenerator(PasswordResetTokenGenerator):
def _make_hash_value(self, user, timestamp):
return (text_type(user.is_active)+text_type(user.pk)+text_type(timestamp))
token_generator = AppTokenGenerator()
this is my urls.py
from django.conf import settings
from django.conf.urls import include, url
from django.urls import path
from django.conf.urls.static import static
from django.contrib import admin
from . import views
urlpatterns = [
url(r'^$', views.signin),
url(r'index/$', views.index),
url(r'signin/$', views.signin),
url(r'signup/$', views.signup),
url(r'signout/$', views.signout),
path('activate/<uidb64>/<token>', views.VerificationView, name="activate"),
]
Try adding .as_view() to all the views that are class based (not function based):
urlpatterns = [
url(r'^$', views.signin),
url(r'index/$', views.index),
url(r'signin/$', views.signin),
url(r'signup/$', views.signup),
url(r'signout/$', views.signout),
path('activate/<uidb64>/<token>', views.VerificationView.as_view(), name="activate"),
]

DisallowedRedirect Django

I am doing a tutorial regarding django and I have two errors:
When I try to create a plant that plant is saved in the data but I get this error:
Exception Type: DisallowedRedirect
Exception Value: Unsafe redirect to URL with protocol 'data'
when I try to edit then I get this error
Exception Type: NoReverseMatch
Exception Value: Reverse for 'plants' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Looking forward to find my mistake.
views.py:
def create_plant(request):
if not request.user.is_authenticated():
return render(request, 'data/login.html')
elif request.method == "POST":
form = PlantForm(request.POST)
if form.is_valid():
plant = form.save(commit=False)
plant.save()
return redirect('data:plants.html', slug = plant.slug)
else:
form=PlantForm()
template = 'data/create_plant.html'
context = {'form': form, }
return render(request, template, context)
def edit_plant(request, slug):
plant = get_object_or_404(Plant, slug=slug)
if request.method=="POST":
form = PlantForm(request.POST, instance=plant)
if form.is_valid():
plant = form.save(commit=False)
plant.save()
return redirect('data:plants')
else:
form = PlantForm(instance=plant)
template = 'data/create_plant.html'
context = {'form': form}
return render(request, template, context)
urls.py:
from django.conf.urls import url
from . import views
app_name = 'data'
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^plants/$', views.index, name='index'),
url(r'^create_plant/$', views.create_plant, name='create_plant'),
url(r'^logout_user/$', views.logout_user, name='logout_user'),
url(r'^login_user/$', views.login_user, name='login_user'),
url(r'^register/$', views.register, name='register'),
url(r'^plants/(?P<slug>[-\w]+)/$',views.detail, name='detail'),
url(r'^plants/(?P<slug>[-\w]+)/edit/$', views.edit_plant, name='edit_plant'),
url(r'^(?P<plant_id>[0-9]+)/delete_plant/$', views.delete_plant, name='delete_plant'),]
The problem was at return redirect('data:plants.html', slug = plant.slug) it should be return redirect('data:index') – George 3 hours ago

Categories