서문: 이 블로그는 이전 블로그 djangoAdvanced에 대한 보충 글입니다.
프론트엔드 인터페이스는 상대적으로 단순하고(못생겼음) 두 가지가 있습니다. 기능:
데이터베이스에서 책 제목 검색 예: 새 책 A
양식에 책 제목을 입력하고 선택 출판사, 저자 선택(객관식) 입력 후 새 도서 생성을 클릭하여 제출하면 데이터베이스에 데이터가 생성됩니다.
먼저 데이터베이스 데이터를 기반으로 페이지에 책 제목을 인쇄하는 첫 번째 기능을 구현해 보겠습니다.
1. URL 추가route
url(r'^book/', views.book),
2. views.py에서 책 메소드 정의
Django는 데이터를 얻기 위해 기본적으로 GET 메소드를 사용하는데, 나중에 구현할 두 번째 함수처럼 데이터를 생성/수정하려면 POST 메소드를 사용해야 합니다.
def book(request): books = models.Book.objects.all() #找到所有的书 publisher_list = models.Publisher.objects.all() author_list = models.Author.objects.all() print("---->:", request) return render(request, "app01/book.html", {"books":books, "publishers":publisher_list, "authors":author_list})
3. template/app01 아래에 book.html을 만듭니다.
책이 데이터베이스에 있습니다. 프런트엔드 페이지에 책 제목을 표시하기 위해 html에서 루프 를 사용하는 모든 책에 대한 개체 모음입니다.
<h2>书列表:</h2> <ul> {% for book in books %} <li>{{ book.name }}</li> {% endfor %} </ul>
먼저 프론트엔드 HTML을 살펴보겠습니다:
<form method="post" action="/payment/book/"> {% csrf_token %} book name:<input type="text" name="name"/> <select name="publisher_id"> {% for publisher in publishers %} <option value="{{ publisher.id }}">{{ publisher.name }}</option> {% endfor %} </select> <select name="author_ids" multiple="multiple"> {% for author in authors %} <option value="{{ author.id }}">{{ author.first_name }}</option> {% endfor %} </select> <div> <input type="submit" value="创建新书"/> </div> </form>
참고:
데이터를 생성하기 위한 것이므로 제출 방법은 반드시 post여야 합니다. action="/pay/book/"은 URL로 book 방식으로 데이터를 제출한다는 의미이며, 해당 데이터는 에 캡슐화되어 있습니다. 요청 매개변수.
퍼블리셔를 선택할 때 퍼블리셔 이름을 백엔드에 전달해야 하나요?? 사실 전혀 필요하지 않고 그냥 하면 됩니다. 선택한 ID를 백엔드에 전달합니다. 따라서 게시자의 ID를 얻기 위해 옵션 태그에 속성 값을 추가했습니다. 제출을 클릭하여 데이터를 제출하면 값의 ID가 name 속성에 제출됩니다. 그런 다음 선택 태그, 이름 속성이 데이터를 배경으로 제출합니다.
html 코드의 첫 번째 줄에 {% csrf_token %}이 있는 것을 볼 수 있는데, 이것이 무엇을 의미하는지 아직 모르겠습니다~_ ~, 저는 이 코드를 삭제하면 데이터가 제출되지 않습니다!!
백그라운드북 방법을 살펴보겠습니다
def book(request): if request.method == "POST": #若是创建书的数据 print(request.POST) book_name = request.POST.get("name") publisher_id = request.POST.get("publisher_id") # 即使在前端页面选择多个作者只会返回一个值,只能取到最后一个作者的id #author_ids = request.POST.get("author_ids") author_ids = request.POST.getlist("author_ids") #getlist 可取出所有作者的id #生成一个书的对象 new_book = models.Book( name = book_name, publisher_id = publisher_id, publish_date = "2017-3-18" ) new_book.save() #同步到数据库 #new_book.authors.add(1,2) 添加作者 new_book.authors.add(*author_ids) #author_ids为列表,需在前面加上*转化为id print("------->>:", book_name,publisher_id,author_ids) books = models.Book.objects.all() publisher_list = models.Publisher.objects.all() author_list = models.Author.objects.all() print("---->:", request) return render(request, "app01/book.html", {"books":books, "publishers":publisher_list, "authors":author_list})
프론트엔드 인터페이스에서 책 제목을 입력할 때: 신간 A, 두 번째 출판사 선택, 2, 3저자를 선택하고, 보기 편의상 백그라운드에서 인쇄합니다. :
<QueryDict: {'name': ['新书A'], 'csrfmiddlewaretoken': ['V9OdHSJ10OFSq3r vI41tggns1W2VxwV'], 'publisher_id': ['2'], 'author_ids': ['2', '3']}> ------->>: 新书A 2 ['2', '3'] ---->: <WSGIRequest: POST '/payment/book/'> [18/Mar/2017 14:06:23] "POST /payment/book/ HTTP/1.1" 200 1335
인쇄 결과에 따르면 Author_ids가 목록이라는 것을 알 수 있습니다. 책에 저자를 추가할 때 다음 코드를 사용합니다.
new_book.authors.add(*author_ids)
왜 목록 앞에 *를 추가해야 하나요? *를 추가하지 않으면 오류가 발생합니다! *를 추가하는 것은 목록 형식 ["2", "3"]을 작성자 ID 형식 2,3으로 변환하는 것입니다.
위 내용은 Django 고급 학습 기록의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!