Professional Documents
Culture Documents
Chương 8 - Django 02
Chương 8 - Django 02
import Topic
urls.py --smp-urlpattern
• -Snip--
# Trang để thêm đường dẫn chủ đề mới
( new_topic / ', views.new_topic,
redirect( '
# Hiển thị một biểu mẫu trống hoặc không hợp lệ. e context =
, ' html ', context)
{'form': form} return render (request
• (url mẫu 'learning_logs: new_topic• Z}" phương thức-'post'> O {X csrf token X} O {f form. as_p o (button name:"
chủ đề.html
2.1. Cho phép người dùng đến Nhập dữ liệu
• Thêm mục nhập mới - Mục nhập ModelForm
• Chúng ta cần tạo một biểu mẫu được liên kết với mô hình Entry
nhưng lần này với một chút tùy chỉnh hơn TopicForm:
forms.py từ django nhập biểu mẫu từ -models
import Chủ đề, Mục nhập
lớp TopicForm(biểu mẫu. Chế độ 1Form) :
--SNLP--
lớp EntryForm(forms. Mode1Form) :
class Meta: model = Entry fields - - [ '
urls.py --snip-urlpattern =
--Snip--
# Trang để thêm đường dẫn mục nhập mới ( ' new_entry / <int:
topic_id> / ', lượt xem. new_entry, name = ' mục nhập mới' ) ,
--Snip--
# Trang để chỉnh sửa một mục.
path( ' edit_entry/ <int : entry_id>/ ' , lượt xem. edit_entry, tên:' edit_entry') ,
• dữ liệu biểu mẫu—yêu cầu. POST) nếu form.is_valid(): biểu mẫu. save() return redirect(
topic_id=topic.id)
2.1. Cho phép người dùng đến Nhập dữ liệu
context {'entry': entry, 'topic': topic, 'form': form} return render
(request, html', context)
</biểu mẫu
{X endblock content X}
2.1. Cho phép người dùng đến Nhập dữ liệu
TKVk:
Emwgh
Euty
2.2. Khung cảnh Lên người dùng Tài khoản
Nút O<
< liệu
< /mẫu>
{X endblock content X}
Người dùng:
trong
2.2. Khung cảnh Lên người dùng Tài khoản
• Đăng xuất - Thêm liên kết đăng xuất vào cơ sở.html
• Chúng tôi sẽ thêm liên kết để đăng xuất vào cơ sở.html vì vậy nó có
sẵn trên mọi trang.
• Chúng tôi sẽ bao gồm nó trong phần {% nếu user.is_authenticated %}
để chỉ những người dùng đã đăng nhập mới có thể xem nó:
• Đăng xuất
2.2. Khung cảnh Lên người dùng Tài khoản
• Hình dưới đây cho thấy trang đã đăng xuất như nó xuất hiện cho
người dùng vừa nhấp vào liên kết Đăng xuất.
• Trang đăng ký
• Tiếp theo, chúng tôi sẽ xây dựng một trang để người dùng mới có thể
đăng ký.
2.2. Khung cảnh Lên người dùng Tài khoản
• Chúng ta sẽ sử dụng UserCreationForm mặc định của Django nhưng
viết hàm view và template của riêng chúng ta.
• Trang đăng ký— URL đăng ký
• Đoạn mã sau đây cung cấp mẫu URL cho trang đăng ký, một lần nữa
trong người dùng / url.py:
người dùng
# Bao gồm url xác thực mặc định.
path(", include( ' django. contrib.auth.urls')), #
Trang đăng ký.
path(' register/', views.register, name-'register'),
2.2. Khung cảnh Lên người dùng Tài khoản
• Trang đăng ký - hàm register() View
• Hàm view register() cần hiển thị một biểu mẫu đăng ký trống khi
trang đăng ký được yêu cầu lần đầu tiên và sau đó xử lý các biểu mẫu
đăng ký đã hoàn thành khi chúng được gửi.
• Khi đăng ký thành công, chức năng cũng cần đăng nhập người dùng
mới.
• Thêm mã sau vào người dùng/chế độ xem.py
• Trang đăng ký - hàm register() View
ViewSpy từ Django. phím tắt import render, redirect from django. con
trib. auth nhậpđăng nhập từ django. đóng góp. auth. biểu
mẫu nhập khẩu UserCreationForm
2.2. Khung cảnh Lên người dùng Tài khoản
def register (yêu cầu): i'"
"Đăng ký người
dùng mới.
if request.method ' POST':
# Hiển thị mẫu đăng ký trống. form =
UserCreationForm() else:
{X mở rộng "learning_logs/base.html" X}
{X chặn nội dung X}
Địa
chỉ
@login_required def
topics(request):
settings.py --snjp--
Def
Bạn đang cố gắng thêm một 'chủ sở hữu' trường không nullable vào chủ đề mà
không có mặc định; Chúng tôi không thể làm điều đó (cơ sở dữ liệu cần một cái
gì đó để điền vào các hàng hiện có). O Vui lòng chọn bản sửa lỗi:
1) Cung cấp mặc định một lần ngay bây giờ (sẽ được đặt trên tất cả các hàng hiện
có với giá trị null cho cột này)
2) Thoát và để tôi thêm mặc định trong các mô hình. .py
2.3. Cho phép người dùng đến Sở hữu Của
họ Dữ liệu
o Chọn một tùy chọn: 1
O Vui lòng nhập giá trị mặc định ngay bây giờ, là Python hợp lệ
Datetime và django.utils. Các mô-đun múi giờ có sẵn, vì vậy bạn có thể làm
ví dụ: timezone.now
Nhập 'thoát' để thoát khỏi lời nhắc này
Di chuyển cho 'learning_logs ':
learni ng_logs/migrations py
Cờ vua 11 admin
Leo núi Il_admin
2.3. Cho phép người dùng đến Sở hữu Của
họ Dữ liệu
• Hạn chế quyền truy cập chủ đề đối với người dùng thích hợp
• Hiện tại, nếu bạn đã đăng nhập, bạn sẽ có thể xem tất cả các chủ đề,
bất kể bạn đăng nhập với tư cách là người dùng nào.
• Chúng tôi sẽ thay đổi điều đó bằng cách chỉ hiển thị cho người dùng
các chủ đề thuộc về họ.
• Thực hiện thay đổi sau đối với hàm topics() trong views.py:
• Hạn chế quyền truy cập chủ đề đối với người dùng thích hợp
• Khi người dùng đăng nhập, đối tượng request có bộ thuộc tính
request.user lưu trữ thông tin về người dùng.
• Truy vấn Topic.objects.filter(owner=request.user) yêu cầu Django chỉ
truy xuất các đối tượng Topic từ cơ sở dữ liệu có thuộc tính owner
khớp với người dùng hiện tại.
2.3. Cho phép người dùng đến Sở hữu Của
họ Dữ liệu
• Vì chúng tôi không thay đổi cách hiển thị chủ đề, chúng tôi hoàn toàn
không cần thay đổi mẫu cho trang chủ đề.
• Bảo vệ chủ đề của người dùng
• Chúng tôi chưa hạn chế quyền truy cập vào các trang chủ đề, vì vậy
bất kỳ người dùng đã đăng ký nào cũng có thể thử một loạt các URL,
như http:///oca/host:8000/topics/1/ và truy xuất các trang chủ đề trùng
khớp.
• Hãy tự mình thử:
• Trong khi đăng nhập với tư cách là người dùng sở hữu tất cả các chủ đề, hãy
sao chép URL hoặc ghi chú ID trong URL của một chủ đề, sau đó đăng xuất
và đăng nhập lại với tư cách là người dùng khác.
2.3. Cho phép người dùng đến Sở hữu Của
họ Dữ liệu
• Enter URL của chủ đề đó. Bạn sẽ có thể đọc các mục, ngay cả khi bạn đã đăng
nhập với tư cách là người dùng khác.
• Bảo vệ chủ đề của người dùng
• Chúng ta sẽ khắc phục điều này ngay bây giờ bằng cách thực hiện
kiểm tra trước khi truy xuất các mục được yêu cầu trong hàm xem
topic():
• -Snip--
2.3. Cho phép người dùng đến Sở hữu Của
họ Dữ liệu
def topic(yêu cầu, topic_id):
"""Hiển thị một chủ đề duy nhất và tất cả các
mục của nó. """ chủ đề Chủ đề. objects.get(id-
topic_id)
# Đảm bảo chủ đề thuộc về người dùng hiện tại. o
nếu chủ đề. Yêu cầu của chủ sở hữu. người dùng: nâng
cao Http404
wews.py --SNLP--
@login yêu cầu def chủ đề mới
(yêu cầu) : """Thêm chủ đề
mới. """ nếu yêu cầu. phương
pháp ' POST':
# Không có dữ liệu nào được gửi; Tạo một
biểu mẫu trống. hình thức TopicForm() khác:
# POST dữ liệu đã gửi; xử lý dữ liệu.
hình thức = nếu new_topic = hình
thức.
đến
new_topic.owner = yêu cầu.
new_topic người dùng. save() return
redirect( ' learning_logs : topics ')
# Hiển thị một biểu mẫu trống hoặc không hợp lệ. context =
{'form': form} return render(request, 'learning_logs/new
topic.html' , context)
--Snip--