2016-07-13 4 views
0

을 편집 할 수있는 형태로로드 pymongo 데이터 :플라스크, pymongo, 양식 - 내가 달성하기 위해 노력하고 무엇

을 나는 텍스트 필드와 이미지를 저장 처음부터 아주 간단한 관리 인터페이스를 구축을 위해 노력하고있다 mongodb. 그런 다음 사용자는 로그인하여 사이트의 내용을 약간 변경할 수 있습니다.

내 문제와 내가이 혼란 스러워요 생각 여기서

가 보여주는 기존의 DB 기록과 형태를 생성하는 pymongo 가능하다 (그래서 그들은 편집 DB에 업데이트 할 수 있습니다)? 문제를 이해하려고 시도한 후에, 나는 Pongongo로 직접 WTForm을 사용할 수 있는지 또는 MongoEngine과 같은 객체 기반 매퍼를 사용해야하는지에 대한 혼란이 있다고 생각합니다. 여기

app = Flask(__name__) 
# define the mongo connection 
app.config['DB_HOST'] = 'mongodb://localhost/' 
app.config['DB_PORT'] = 27017 
app.config['DB_DBNAME'] = 'my_db' 
the_db = PyMongo(app, config_prefix='DB') 

#others routes here... 

@app.route("/admin/") 
def dashboard(): 
    pages = list(the_db.db.pages.find({})) 
    return render_template('admin.html', pages=pages) 

@app.route('/admin/update', methods=['POST']) 
def update(): 
    updated = datetime.datetime.utcnow() 
    page = request.form['page_name'] 
    header = request.form['header'] 
    body = request.form['body'] 

    h_db.db.pages.update_one(
     {'page': page}, 
     {'$set': 
      { 
       'updated': updated, 
       'header': header, 
       'body': body 
      } 
     }, upsert=True) 

    pages = list(the_db({})) 
    return render_template('admin.html', pages=pages) 

템플릿입니다 :

여기 내 플라스크 응용 프로그램입니다이 실제로 정말 간단

{% for i in pages %} 
    {{ i.page }}<br> 
{% endfor %} 


{% from "_formhelpers.html" import render_field %} 
<form action="/admin/update" autocomplete="on" method="POST"> 
    {{ render_field(form.username) }} 
    <input type="text" name="page_name" /><br/> 
    <input type="text" name="header" /><br/> 
    <input type="TextAreaField" name="body" /><br/> 
    <input type="submit" name="submit" /><br/> 
</form> 
+0

이것은 플라스크 위에 장고를 선택한 예입니다. 관리자는 이미 포함되어 있으며 편집보기도 포함되어 있습니다. https://docs.djangoproject.com/ko/1.9/ref/class-based-views/generic-editing/#django.views.generic.edit.UpdateView – joshlsullivan

답변

0

.

<input type="text" name="firstname" value="Mickey"><br> 

는 그리고 "미키는"당신을위한 형태로 표시됩니다 : 당신이 양식에 대한 HTML 문서를 보면 당신은 당신이 뭔가를 할 수 있습니다 찾을 수 있습니다. 따라서, 플라스크를 사용하면 경로에 대한 mongodb 호출의 값을 보유하고있는 서버 코드의 변수를 선언 한 다음 "페이지"와 같이 템플릿에 전달할 수 있습니다. 그러면 프런트 엔드에서 동적으로 렌더링 할 수 있습니다 신사의 임베디드 파이썬, 뭔가 등으로 :

@app.route("/admin/<int:page>") 
def dashboard(page): 
    pages = the_db.db.pages.find({page}) 
    for p in pages: 
     page_name = [p['page']] 
     header = [p['header']] 
     body = [p['body']] 
    return render_template('admin.html', page_name=page_name, header=header, body=body) 

그런 다음 당신은 당신의 템플릿을 가지고 포함 같이 할 수 있습니다 : 나는 WTForms 전문가가 아니에요

<form action="/admin/update" autocomplete="on" method="POST"> 
    {{ render_field(form.username) }} 
    <input type="text" name="page_name" value={{ page_name|string }}/><br/> 
    <input type="text" name="header" value={{ header|string }}/><br/> 
    <input type="TextAreaField" name="body" value={{ body|string }}/><br/> 
    <input type="submit" name="submit" /><br/> 
</form> 

, 그래서 아마 도우미를 우회하고있어 그 그것은 제공하지만, 대부분의 기본 사항은 여기에 있습니다. 요약 :

MongoDB 문서의 요소를 구문 분석하여 템플릿에 전달해야합니다. Jinja는 HTML 표준 (요소의 "값"자리 표시 자)에 설명 된대로 적절한 값으로 프런트 엔드에이 값을 동적으로 렌더링하는 기능을 사용할 수 있습니다. 이것은 당신이 원하는 것을 가장 기본적으로 얻을 것입니다.

환상적이기를 원한다면 AngularJS를보고 프론트 엔드 MVC를 처리하고 제출하기 전에 즉석에서 편집 내용을 시각화 할 수 있습니다. SOCOM에서 볼 수있는 것과 같습니다 편집 상자 아래에 실시간으로 표시됩니다.

+0

지금 당신이 설명 했으니 까, 그것은 간단하게 보입니다. 한가지 더,에서 @ app.route ('/ 관리/업데이트'뿐만 아니라 페이지 ID를 포함하도록 업데이트해야 하는가? 당신에게 달려 종류의 – user3939059

+0

을. 나는 또한 종류의/관리/ 요청에서 오는 것으로 가정 페이지 ID를 전달하는 UI 템플릿./update의 경우 admin.html 템플릿의 출력물의 일부로 페이지 아이디를 가질 수 있으며 제출하면 업데이트 요청과 함께 전송됩니다. 정말 멋지죠. . – tadamhicks