gpt4 book ai didi

python - (Udacity + GAE) 创建一个表单来编辑现有的 ndb 实体

转载 作者:行者123 更新时间:2023-11-28 18:46:03 25 4
gpt4 key购买 nike

我正在开始我的第一个小项目,使用 Google AppEngine (Python),由 Udacity 辅导。我使用过 Drupal。

我想在每个工作实体的页面中创建一个“编辑”链接,这将允许其作者更新实体的字段。我不太确定从哪里或如何开始实现这一目标。如有任何帮助,我们将不胜感激。

这是我到目前为止所做的:

主要.py:

import webapp2
import jinja2
import os
import cgi
import urllib
from google.appengine.ext import ndb


template_dir = os.path.join(os.path.dirname(__file__), 'templates')
env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir),
autoescape = True)


def render_template(template, **params):
t = env.get_template(template)
return t.render(params)


# B A S E H A N D L E R #
#########################

class BaseHandler(webapp2.RequestHandler):

def write(self, *a, **kw):
self.response.write(*a, **kw)

def render(self, template, **kw):
self.response.write(render_template(template, **kw))


# M A I N P A G E #
###################

class MainPage(BaseHandler):
def get(self):
jobs = Job.query()
self.render('index.html', jobs = jobs)

# J O B E N T I T Y #
#######################

class Job(ndb.Model):
title = ndb.StringProperty(required = True)
description = ndb.TextProperty(required = True)
requirements = ndb.TextProperty()
created = ndb.DateTimeProperty(auto_now_add = True)

class JobHandler(BaseHandler):
pass
# Created this empty class to organise its subclasses,
# because they perform 'Job' functions.
# Is this a good practice?

class NewJob(JobHandler):

def get(self):
self.render('newjob.html')

def post(self):
title = self.request.get('title')
description = self.request.get('description')
requirements = self.request.get('requirements')

if title and description:
j = Job(title = title,
description = description,
requirements = requirements)
j.put()
self.redirect('/job/%s' % str(j.key.id()))
else:
self.render('newjob.html')


class JobPage(JobHandler):

def get(self, job_id):
j = Job.get_by_id(int(job_id))
self.render('jobpage.html', j = j)

app = webapp2.WSGIApplication([
('/', MainPage),
('/newjob', NewJob),
('/job/([0-9]+)', JobPage),
], debug=True)

newpage.html:

{% extends "base.html" %}

{% block content %}

<form method="post">

<div>
<label>Job Title:<br>
<input type="text" name="title" value="{{title}}">
</label>
</div>

<div>
<label>Description:<br>
<textarea name="description" col="60">{{description}}</textarea>
</label>
</div>

<div>
<label>Requirements:<br>
<textarea name="requirements" col="60">{{requirements}}</textarea>
</label>
</div>

<input type="submit">

</form>

{% endblock %}

最后是 jobpage.html

{% extends "base.html" %}

{% block content %}
{{j.title}}
{{j.description}}
{{j.requirement}}
{{j.created.strftime("%b %d, %Y")}}
{% endblock %}

最佳答案

您可能应该向您的网站添加一个编辑处理程序。像 ('/job/([0-9]+)/edit', EditJobPage) 这样的东西应该可以。在确认正确的作者登录后,它可以提取作业并将值放在 Get 请求的文本字段中。然后它的 Post 函数可以接受编辑的字段并相应地更新 Job。

然后您可以在请求时将此链接直接添加到作业 html。

(显然这应该只在作者登录的情况下完成)

<a href="/job/{{j.key.id()}}/edit}">

确保在允许 get 和(更重要的)post 请求继续执行之前确认作者已登录!

编辑: 我实际上并没有回答你关于如何编辑现有的 ndb 实体的问题。完成的方法是查询实体,将值重新分配给实体变量,然后将其放入。

job_to_edit = Job.get_by_id(job_id)  # or ndb.Key(Job, job_id).get()
job_to_edit.description = new_description
job_to_edit.put()
# Tada!

免责声明:我唯一的经验是参加了 Udacity 类(class)。

关于python - (Udacity + GAE) 创建一个表单来编辑现有的 ndb 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com