Review Mã đăng nhập python

Thủ Thuật về Mã đăng nhập python Chi Tiết

Dương Gia Minh đang tìm kiếm từ khóa Mã đăng nhập python được Update vào lúc : 2022-12-14 23:20:08 . Với phương châm chia sẻ Mẹo về trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi đọc tài liệu vẫn ko hiểu thì hoàn toàn có thể lại Comments ở cuối bài để Admin lý giải và hướng dẫn lại nha.

Python là một ngôn từ lập trình mạnh mẽ và tự tin, dễ học. Nó có cấu trúc tài liệu cấp cao hiệu suất cao và cách tiếp cận đơn giản nhưng hiệu suất cao đối với lập trình hướng đối tượng. Cú pháp tao nhã và kiểu gõ động của Python, cùng với bản chất diễn giải của nó, làm cho nó trở thành ngôn từ lý tưởng để viết ngữ cảnh và phát triển ứng dụng nhanh gọn trong nhiều nghành trên hầu hết những nền tảng

Trình thông dịch Python và thư viện chuẩn mở rộng có sẵn miễn phí ở dạng nguồn hoặc nhị phân cho tất cả những nền tảng chính từ trang web Python, https. //www. con trăn. org/, và hoàn toàn có thể được phân phối tự do. Trang web tương tự cũng chứa những bản phân phối và con trỏ tới nhiều mô-đun, chương trình và công cụ Python miễn phí của bên thứ ba và tài liệu tương hỗ update

Trình thông dịch Python thuận tiện và đơn giản mở rộng với những hàm và kiểu tài liệu mới được triển khai trong C hoặc C++ (hoặc những ngôn từ khác hoàn toàn có thể gọi được từ C). Python cũng phù hợp làm ngôn từ mở rộng cho những ứng dụng hoàn toàn có thể tùy chỉnh

Hướng dẫn này ra mắt cho những người dân đọc một cách không chính thức những khái niệm và tính năng cơ bản của ngôn từ và khối mạng lưới hệ thống Python. Sẽ rất hữu ích khi có một trình thông dịch Python tiện dụng cho trải nghiệm thực hành, nhưng tất cả những ví dụ đều độc lập, vì vậy hướng dẫn cũng hoàn toàn có thể được đọc ngoại tuyến

Để biết mô tả về những đối tượng và mô-đun tiêu chuẩn, hãy xem. đưa ra một định nghĩa chính thức hơn về ngôn từ. Để viết những phần mở rộng trong C hoặc C++, hãy tham khảo và. Ngoài ra còn tồn tại một số trong những cuốn sách nâng cao về Python

Hướng dẫn này sẽ không nỗ lực toàn diện và gồm có mọi tính năng đơn lẻ hoặc thậm chí mọi tính năng thường được sử dụng. Thay vào đó, nó ra mắt nhiều tính năng đáng để ý quan tâm nhất của Python và sẽ cho bạn ý tưởng hay về mùi vị và phong cách của ngôn từ. Sau khi đọc nó, bạn sẽ hoàn toàn có thể đọc và viết những mô-đun và chương trình Python, đồng thời bạn sẽ sẵn sàng tìm hiểu thêm về những mô-đun thư viện Python rất khác nhau được mô tả trong

Trong phần này, tất cả chúng ta sẽ tìm hiểu những cách làm nào để tạo ra một khối mạng lưới hệ thống đăng nhập người tiêu dùng cho ứng dụng

Để giúp những bạn dễ theo dõi, sau đây là list những nội dung bài viết trong chuỗi bài hướng dẫn này

    Phần 1. Chào thế giớiPhần 2. Tìm hiểu về mẫuPhần 3. Tìm hiểu về Web FormsPhần 4. Sử dụng cơ sở dữ liệuPhần 5. Xử lý đăng nhập (Bài viết này)Phần 6. Hồ sơ thành viên và ảnh đại diệnPhần 7. Xử lý lỗiPhần 8. Tạo hiệu suất cao theo dõiPhần 9. PartitionPhần 10. email hỗ trợPhần 11. Nâng cấp giao diệnPhần 12. Xử lý thời gianPhần 13. Hỗ trợ đa ngôn ngữPhần 14. Sử dụng AjaxPhần 15. Tinh chỉnh cấu trúc ứng dụngPhần 16. Hỗ trợ tìm kiếm hỗ trợPhần 17. Triển khai ứng dụng trên LinuxPhần 18. Triển khai ứng dụng với HerokuPhần 19. Triển khai ứng dụng với DockerPhần 20. JavaScript nâng caoPhần 21. Thông báo cho những người dân sử dụngPhần 22. Tìm hiểu về trách nhiệm nềnPhần 23. Xây dựng API

Bạn hoàn toàn có thể truy cập mã nguồn cho phần này tại GitHub

Trước đây, tất cả chúng ta đã tạo ra một biểu mẫu đăng nhập trong Phần 3 và tìm hiểu cách sử dụng cơ sở tài liệu trong Phần 4. Tiếp theo, tất cả chúng ta sẽ phân phối những kiến ​​thức đã học trong hai phần trước để tạo ra một khối mạng lưới hệ thống đăng nhập thông tin người tiêu dùng đơn giản

Mã băm cho mật khẩu của người tiêu dùng (Password hashing)

Trong Phần 4, tất cả chúng ta đã định nghĩa trường password_hash trong thông số kỹ thuật người tiêu dùng tài liệu. Trường này được sử dụng để chứa mã băm cho mã mật của người tiêu dùng (Để đảm bảo tính chắc như đinh nhất, từ đây chúng tôi sẽ sử dụng thuật ngữ người tiêu dùng thay cho những người dân tiêu dùng). Mã băm này sẽ được sử dụng để xác thực mật mã mà người tiêu dùng nhập vào trong quá trình đăng nhập. Quá trình và những nguyên tắc tạo ra hash rất phức tạp và chỉ có những Chuyên Viên về bảo mật thông tin mới hiểu, vì thế tất cả chúng ta sẽ không đi sâu vào rõ ràng ở đây. Tuy nhiên, tất cả chúng ta hoàn toàn có thể sử dụng một số trong những thư viện Flask để tạo ra hàm băm một cách thuận tiện và đơn giản và nhanh gọn.

Trong những thư viện của Flask, có một gói đáp ứng những phương thức để thao tác với tên băm là Werkzeug. Nếu để ý quá trình setup Flask, bạn hoàn toàn có thể thấy tên của gói này ở đâu trong những thông báo mà Flask in ra trong suốt quá trình setup chính bới gói này là một trong những thành phần quan trọng nhất của Flask. Cũng vì nguyên do đó, Werkzeug đã được setup sẵn trong môi trường tự nhiên thiên nhiên ảo của bạn ngay từ đầu. Ví dụ sau sẽ minh họa cách tạo hàm băm cho mật mã bằng thư viện Werkzeug

1

2

3

4

>>> từ werkzeug. bảo mật thông tin nhập generate_password_hash

>>> hash = generate_password_hash('foobar')

>>> băm

'pbkdf2. sha256. 150000$3HUtwgW8$39ae9f2f4925661c5cf9cfa04842b04b874730f87739f65316eb6e85f4678c28'

Trong ví dụ trên, chuỗi mật mã “foobar” ban đầu được quy đổi thành một chuỗi mã dài bằng những phương thức mã hóa không thể đảo ngược, nghĩa là bạn sẽ không thể quy đổi chuỗi mã này thành mã ban đầu mật mã bằng . Too this call is hash (hash). Và hơn thế nữa, nếu bạn tiếp tục băm một mật mã nhiều lần, bạn sẽ nhận được nhiều kết quả rất khác nhau. Vì vậy, bạn sẽ không thể xác định được hai người tiêu dùng có cùng mã mật hay là không nếu chỉ nhìn vào giá trị băm từ mật mã của tớ

Để xác thực mã mật khẩu (xác minh), tất cả chúng ta sử dụng hàm thứ hai từ thư viện Werkzeug như trong ví dụ sau

1

2

3

4

5

>>> từ werkzeug. bảo mật thông tin nhập check_password_hash

>>> check_password_hash(băm, 'foobar')

ĐÚNG VẬY

>>> check_password_hash(băm, 'barfoo')

Sai

Quá trình xác thực sẽ nhận mã mật khẩu do người tiêu dùng nhập vào, quy đổi thành mã băm và so sánh với mã băm được sinh ra từ mã cấm đầu tiên và được lưu lại trong cơ sở tài liệu. Nếu mã băm từ mật mã nhập vào giống với mã băm đã được tàng trữ, hàm sẽ trả về True, ngược lại nó sẽ trả về False

Quá trình tạo hàm băm và xác thực mã mật khẩu sẽ được thêm vào hai phương thức mới trong quy mô người tiêu dùng như sau

ứng dụng/quy mô. py. Tạo mã băm và xác thực mã bảo mật thông tin

1

2

3

4

5

6

7

8

9

10

11

12

từ werkzeug. bảo mật thông tin nhập generate_password_hash, check_password_hash

 

.. .

 

lớp Người dùng(db. Mô hình).

    . . .

 

    def set_password(self, password):

        bản thân. password_hash = generate_password_hash(password)

 

    def check_password(self, password):

        return check_password_hash(self.password_hash, mật khẩu)

Với hai phương thức này, một đối tượng người tiêu dùng hoàn toàn có thể xác thực mã mật khẩu của tớ. Sau đây là một ví dụ về cách sử dụng hai phương thức này

1

2

3

4

5

6

>>> u = Người dùng(username='thai', email='[email protected]')

>>> u. set_password('mypassword')

>>> u. check_password('anotherpassword')

Sai

>>> u. check_password('mypassword')

ĐÚNG VẬY

Giới thiệu về Flask-Login

Trong phần này, tất cả chúng ta cũng tiếp tục tìm hiểu thêm một Flask thư viện mở rộng rất phổ biến là Flask-Login

Thư viện mở rộng này quản lý trạng thái đăng nhập của người tiêu dùng. Nhờ đó, khối mạng lưới hệ thống hoàn toàn có thể ghi nhớ những thông tin về người tiêu dùng đã đăng nhập trong một phiên thao tác của viện và được cho phép họ truy cập những trang Web yêu cầu người tiêu dùng phải đăng nhập. Nó đáp ứng hiệu suất cao “Remember me” để người tiêu dùng vẫn giữ trạng thái đăng nhập trong cả những lúc họ đã đóng trình duyệt. Để khởi đầu phần này, tất cả chúng ta hãy setup Flask-Login trong môi trường tự nhiên thiên nhiên ảo của bạn

1

(myenv) $ pip3 install flask-login

Tương tự như những thư viện mở rộng khác, Flask-Login phải được khởi tạo ngay sau khi hoàn toàn có thể ứng dụng trong tệp app/__init__. py as after

ứng dụng/__init__. py. Khởi tạo Flask-Đăng nhập

1

2

3

4

5

6

7

8

.. .

từ flask_login nhập Trình quản lý đăng nhập

 

app = Flask(__name__)

.. .

đăng nhập = Trình quản lý đăng nhập(ứng dụng)

 

.. .

Điều chỉnh quy mô tài liệu người tiêu dùng (User) cho Flask-Login

Flask-Login thư viện sẽ thao tác với người tiêu dùng quy mô tài liệu với một số trong những thuộc tính và phương thức định sẵn. Đây là một thiết kế hay chính bới nếu những thuộc tính và phương thức này được đáp ứng trong quy mô tài liệu, Flask-Login sẽ thực hiện đúng theo yêu cầu mặc kệ những điều kiện rất khác nhau. Ví dụ như nó hoàn toàn có thể hoạt động và sinh hoạt giải trí với người tiêu dùng quy mô tài liệu từ bất kỳ khối mạng lưới hệ thống cơ sở tài liệu nào

Sau đây là bốn yêu cầu của Flask-Login với người tiêu dùng quy mô tài liệu

    is_authenticated. một thuộc tính sẽ được gán là Đúng nếu người tiêu dùng mang tên và mã mã hợp lệ, Sai nếu một trong hai không đúngis_active. một thuộc tính được gán là True nếu tài khoản người tiêu dùng trong chính sách hoạt động và sinh hoạt giải trí (đang hoạt động và sinh hoạt giải trí) và False nếu đảo ngượcis_anonymous. một thuộc tính được gán là Sai đối với những người dân tiêu dùng thông thường và Đúng đối với những người dân tiêu dùng ẩn danh (ẩn danh)get_id(). một phương thức để trả lại list người tiêu dùng (id) dưới dạng chuỗi

Chúng ta hoàn toàn có thể viết mã cho yêu cầu này một cách thuận tiện và đơn giản. Nhưng chính bới những yêu cầu này tương đối tổng quát, Flask-Login đáp ứng một lớp mixin được gọi là UserMixin(Nếu chưa hiểu về khái niệm mixin trong Python, bạn hoàn toàn có thể tham khảo tại đây). Lớp này còn có sẵn những khai báo và mã thực thi hoàn toàn có thể sử dụng được với phần lớn quy mô tài liệu Người dùng. Sau đây là cách thêm lớp mixin vào quy mô tài liệu

ứng dụng/quy mô. py. mixin layer for user in Flask-Login

1

2

3

4

5

.. .

từ flask_login nhập UserMixin

 

lớp Người dùng(UserMixin, db.Mô hình).

    . . .

Hàm tải thông tin người tiêu dùng

Flask-Login theo dõi trạng thái của những người dân tiêu dùng đã đăng nhập bằng phương pháp lưu những ID tương ứng trong những phiên thao tác (phiên người tiêu dùng) – một vùng tàng trữ được xác định cho từng người tiêu dùng đang link vào ứng dụng. Mỗi khi người tiêu dùng đăng nhập truy cập một trang mới trong ứng dụng, Flask-Login sẽ lấy ID của người tiêu dùng đó từ phiên thao tác và tải tài liệu về người tiêu dùng đó vào bộ nhớ

Bởi vì Flask-Login không trực tiếp thao tác với cơ sở tài liệu, nó nên phải có sự trợ giúp của những thành phần rất khác nhau trong ứng dụng để tìm kiếm và tải tài liệu về người tiêu dùng. Vì vậy, thư viện này nên phải có một hiệu suất cao tương hỗ để tải thông tin người tiêu dùng. Hàm này sẽ tìm kiếm và tải những thông tin về người tiêu dùng từ cơ sở tài liệu nhờ vào Id của người tiêu dùng đó. Chúng ta sẽ thêm mã cho hiệu suất cao này vào mô-đun ứng dụng/quy mô. py as after

ứng dụng/quy mô. py. Hàm tải tài liệu người tiêu dùng cho Flask-Login

1

2

3

4

5

6

từ ứng dụng nhập đăng nhập

.. .

 

@đăng nhập. user_loader

def load_user(id):

    trả lại Người dùng. truy vấn. lấy(int(id))

Chúng ta sẽ đăng ký hiệu suất cao này với Flask-Login qua decorator @login.user_loader. Tham số id sẽ được truyền vào hàm này dưới dạng chuỗi (Chuỗi), vì vậy nếu cơ sở tài liệu định dạng Id dạng số nguyên (số nguyên), tất cả chúng ta sẽ phải quy đổi Id thành số nguyên như trong ví dụ ở trên

Đăng nhập người tiêu dùng

Sau tiến trình sẵn sàng sẵn sàng ở trên, tất cả chúng ta hoàn toàn có thể quay lại với hàm hiển thị đăng nhập mà tất cả chúng ta đã tạo ra trong Phần 3. Lưu ý là tại thời điểm này, hàm này sẽ không còn hiệu suất cao đăng nhập thực tế mà chỉ đưa ra một thông báo nhờ hàm flash() nếu người tiêu dùng nhập đầy đủ tên người tiêu dùng và mã mật (với bất kỳ giá trị nào). Hiện tại, sau khi đã có cơ sở tài liệu và biết phương pháp tạo ra hàm băm cho mã mật, tất cả chúng ta hoàn toàn có thể làm cho nó thực sự hoạt động và sinh hoạt giải trí

ứng dụng/tuyến đường. py. Hàm hiển thị đăng nhập

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

.. .

từ flask_login nhập current_user, login_user

từ ứng dụng. quy mô nhập Người dùng

 

.. .

 

@ứng dụng. tuyến đường('/đăng nhập', methods=['GET', 'POST'])

def đăng nhập().

    if current_user. is_authenticated.

        trả lại chuyển hướng(url_for('index'))

    biểu mẫu = Biểu mẫu đăng nhập()

    nếu biểu mẫu. validate_on_submit().

        người tiêu dùng = Người dùng. truy vấn. filter_by(tên người tiêu dùng=biểu mẫu . .tên người tiêu dùng. tài liệu). đầu tiên()

        nếu người tiêu dùng là Không có or not user.check_password(biểu mẫu. mật khẩu. tài liệu).

            flash('Tên người tiêu dùng hoặc mật khẩu không hợp lệ')

            return redirect(url_for('login'))

        login_user(user, remember=form.nhớ_tôi. tài liệu)

        trả lại chuyển hướng(url_for('index'))

    return render_template('đăng nhập. html', tiêu đề='Đăng nhập', form=form)

Trong hai dòng lệnh đầu tiên của hàm True0, tất cả chúng ta sẽ xử lý và xử lý vấn đề khi có một người tiêu dùng đã đăng nhập thành công nhưng truy cập lại vào trang /đăng nhập vì nguyên do nào đó. Dù về mặt lập trình, điều này sẽ không còn gì sai, nhưng đây là vấn đề không hay cho những người dân tiêu dùng (theo nguyên tắc thiết kế ứng dụng, để có UX – User eXperience hay trải nghiệm của người tiêu dùng – tốt thì người tiêu dùng tránh việc . Vì vậy, trong trường hợp này, chúng tôi sẽ sử dụng giải pháp để chuyển hướng người tiêu dùng của tớ trở lại trang chủ (với URL /index) nếu đây là người tiêu dùng đã đăng ký và được khối mạng lưới hệ thống xác nhận (đăng nhập thành công . Để làm được điều này, tất cả chúng ta cần sự trợ giúp của biến True1 có sẵn trong Flask-Login. Nếu người tiêu dùng đã đăng nhập, biến này sẽ chứa những thông tin về người tiêu dùng từ cơ sở tài liệu (việc tải thông tin của người tiêu dùng từ cơ sở tài liệu được thực hiện thông qua hàm True2 mà chúng tôi đã tạo ra ở trên). Trong trường hợp người tiêu dùng chưa đăng nhập, biến này sẽ chứa giá trị đại diện cho những người dân tiêu dùng ẩn danh (ẩn danh). Ngoài ra, biến này còn thuộc tính is_authenticated rất hữu ích để giúp xác định người tiêu dùng có đăng nhập hay là không. Đoạn mã của tất cả chúng ta sẽ kiểm tra thuộc tính này, và nếu nó trả về True – đồng nghĩa đây là người tiêu dùng đã đăng nhập thành công – thì tất cả chúng ta sẽ chuyển hướng tới và hiển thị trang chủ thay vì hiển thị trang đăng nhập

Trước đây, chúng tôi cũng sử dụng hàm flash() để hiển thị một thông báo là người tiêu dùng đăng nhập thành công mà không thực hiện những tiến trình quá trình đăng nhập. Nhưng lần này thì tất cả chúng ta hoàn toàn có thể thay thế mã giả này bằng mã thật cho quá trình đăng nhập. Để làm điều này, trước khi hết, tất cả chúng ta cần tải tài liệu về người tiêu dùng từ cơ sở tài liệu. Thông qua hình thức đăng nhập, tất cả chúng ta sẽ nhận được tên người tiêu dùng. Giá trị này sẽ được sử dụng để tìm Id tương ứng của người tiêu dùng này trong cơ sở tài liệu bằng hàm True5 của truy vấn đối tượng (truy vấn) trong thư viện SQLAlchemy. Hàm filter_by sẽ trả về những đối tượng có mức giá trị tên người tiêu dùng khớp với tên người tiêu dùng mà tất cả chúng ta đã sử dụng. Bởi vì tất cả chúng ta biết rằng tên người tiêu dùng mang tính chất chất duy nhất nên chỉ có thể có tối đa một đối tượng người tiêu dùng trong cơ sở tài liệu mang tên người tiêu dùng trùng với tên người tiêu dùng mà tất cả chúng ta đang tìm kiếm. Do đó, tất cả chúng ta hoàn toàn có thể sử dụng hàm True6, hàm này sẽ trả về một kết quả nếu có một người tiêu dùng như vậy hoặc Không có người tiêu dùng nào nếu không tồn tại trong cơ sở tài liệu. Trong Phần 4, tất cả chúng ta đã thấy kết quả khi gọi hàm True7 trong một truy vấn. nó sẽ trả về tất cả những kết quả trùng khớp với truy vấn đó trong cơ sở tài liệu. Hàm True6 thường được sử dụng trong trường hợp tất cả chúng ta biết trước chỉ hoàn toàn có thể đạt được kết quả tối đa

Nếu chúng tôi tìm thấy một người tiêu dùng từ cơ sở tài liệu có cùng tên người tiêu dùng như trong biểu mẫu đăng nhập, chúng tôi sẽ tiến hành tiến trình tiếp theo là kiểm tra mã mật khẩu. Quá trình này được thực hiện bằng phương pháp sử dụng hàm True9 mà tất cả chúng ta đã nói ở phần đầu của bài này. Hàm này sẽ tạo hàm băm từ mã mật mã do người tiêu dùng nhập vào và so sánh với giá trị password_hash từ bảng Người dùng. Nếu hai giá trị này giống nhau thì mật mã do người tiêu dùng nhập vào là đúng (hợp lệ), ngược lại thì mật mã này là sai (không hợp lệ). Như vậy, ở đầu cuối tất cả chúng ta có hai kĩ năng người tiêu dùng không được phép đăng nhập. tên người tiêu dùng hoặc mật khẩu nhập vào là sai. Trong cả hai trường hợp, tất cả chúng ta sẽ sử dụng flash() để hiển thị một thông báo lỗi và chuyển khuynh hướng về trang đăng nhập để người tiêu dùng hoàn toàn có thể nhập những thông tin lần nữa

Nếu tên người tiêu dùng và mật khẩu tương ứng đúng, tất cả chúng ta sẽ gọi một hàm trong thư viện Flask-Login là False2 để ghi nhận trạng thái của người tiêu dùng này là đã đăng nhập thành công. Điều này cũng đồng nghĩa với việc ứng dụng sẽ tải và lưu giữ những thông tin về người tiêu dùng từ cơ sở tài liệu vào bộ nhớ và lưu giữ những thông tin này trong suốt thời gian thao tác của người tiêu dùng (cho tới lúc người tiêu dùng đăng xuất – đăng xuất – thoát khỏi . Nhờ đó, khi người tiêu dùng truy cập bất kỳ trang nào, ứng dụng cũng hoàn toàn có thể thuận tiện và đơn giản tìm thấy thông tin về chúng thông qua biến True1

Sau khi người tiêu dùng đăng nhập thành công, tất cả chúng ta sẽ chuyển (chuyển hướng) người tiêu dùng đến trang chủ

Đăng xuất (Log Out)

Để hoàn tất quá trình xuất nhập, tất cả chúng ta cũng phải đáp ứng hiệu suất cao đăng xuất (đăng xuất) ra khỏi ứng dụng. Chúng ta sẽ sử dụng một hiệu suất cao khác của thư viện Flask-Login được gọi là False4 cho mục tiêu này

ứng dụng/tuyến đường. py. Hàm hiển thị Đăng xuất

1

2

3

4

5

6

7

8

9

.. .

từ flask_login nhập đăng xuất_user

 

.. .

 

@ứng dụng. tuyến đường('/logout')

def đăng xuất().

    logout_user()

    return redirect(url_for('index'))

Chúng ta cũng cần phải thay thế link Đăng nhập trong thay đổi hướng bằng link Đăng xuất sau khi người tiêu dùng đăng nhập thành công. Chúng ta sẽ làm điều này bằng phương pháp update cơ sở tập tin. html

ứng dụng/mẫu/cơ sở. html. Hiển thị link đăng nhập và đăng xuất trên thanh định hướng

1

2

3

4

5

6

7

8

9

    

Blog của tôi

        href="{{ url_for(>trang chủ

% nếu current_user. is_anonymous %

        href="{{ url_for(>Login

% khác %

        href="{{ url_for(>Logout

% endif %

    

Như đã nói ở trên, thuộc tính is_anonymous được thư viện Flask-Login đáp ứng qua lớp UserMixin. Biểu thức False7 sẽ có mức giá trị True khi người tiêu dùng chưa đăng nhập

Yêu cầu người tiêu dùng đăng nhập

Flask-Login có một hiệu suất cao rất hữu ích để yêu cầu người tiêu dùng đăng nhập nếu họ muốn truy cập vào một số trong những trang định sẵn trong ứng dụng. Nếu người tiêu dùng không đăng nhập để tìm cách truy cập những trang này, Flask-Login sẽ tự động chuyển họ đến trang đăng nhập và quay lại trang được yêu cầu truy cập sau khi người tiêu dùng đã đăng nhập thành công

Để sử dụng hiệu suất cao này, Flask-Login nên phải biết hàm hiển thị cho quá trình đăng nhập. Chúng ta sẽ thay đổi file app/__init__. py to make this thing

1

2

3

.. .

đăng nhập = Trình quản lý đăng nhập(ứng dụng)

đăng nhập. login_view = 'đăng nhập'

Giá trị ‘False9‘ ở trên là tên gọi của hàm hiển thị đăng nhập. Hay nói cách khác, đó là tên gọi bạn sẽ sử dụng khi gọi hành vi is_authenticated0 để lấy giá trị của URL

Chúng ta sẽ sử dụng decorator is_authenticated1 cho những hàm hiển thị nào chỉ được cho phép người tiêu dùng đăng nhập truy cập. Khi bạn thêm trình trang trí này vào một hàm hiển thị và trình trang trí phía dưới @app. route, this function will be protected and not allow the user not posted access truy cập. Sau đây là ví dụ về hiệu suất cao hiển thị cho trang chủ của ứng dụng

ứng dụng/tuyến đường. py. người trang trí is_authenticated1

1

2

3

4

5

6

7

từ flask_login nhập đăng nhập_required

 

@ứng dụng. tuyến đường("https://cunghoidap.com/")

@ứng dụng. tuyến đường('/index')

@login_required

def index().

    . . .

Chúng ta cần làm một việc nữa là thêm tính năng trở về trang mà người tiêu dùng yêu cầu truy cập sau khi đã đăng nhập thành công. Khi một người tiêu dùng chưa đăng nhập truy cập vào một trang được hiển thị bởi một hàm hiển thị đã được bảo vệ bởi trang trí is_authenticated1, trang trí này sẽ chuyển hướng người tiêu dùng đó đến trang đăng nhập, nhưng nó sẽ thêm vào một vài thông số để ứng dụng . Ví dụ như khi người tiêu dùng muốn truy cập trang /index khi chưa đăng nhập, trang trí is_authenticated1 sẽ kiểm tra yêu cầu này và chuyển hướng người tiêu dùng đến /login, nhưng nó sẽ thêm một số trong những tham số vào URL của trang /login như sau. /login?next=/index. Tham số tiếp theo trong URL này sẽ được gán giá trị của URL được yêu cầu cấm ban đầu, nhờ đó ứng dụng biết sẽ phải quay lại trang /index sau khi người tiêu dùng đăng nhập thành công

Sau đây là đoạn mã để đọc và xử lý tham số is_authenticated5

ứng dụng/tuyến đường. py. Chuyển hướng tới trang tại “tiếp theo”

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

từ bình nhập yêu cầu

từ werkzeug. url nhập url_ phân tích cú pháp

 

@ứng dụng. tuyến đường('/đăng nhập', methods=['GET', 'POST'])

def đăng nhập().

    . . .

    nếu biểu mẫu. validate_on_submit().

        người tiêu dùng = Người dùng. truy vấn. filter_by(tên người tiêu dùng=biểu mẫu . .tên người tiêu dùng. tài liệu). đầu tiên()

        nếu người tiêu dùng là Không có or not user.check_password(biểu mẫu. mật khẩu. tài liệu).

            flash('Tên người tiêu dùng hoặc mật khẩu không hợp lệ')

            return redirect(url_for('login'))

        login_user(user, remember=form.nhớ_tôi. tài liệu)

        trang_tiếp theo = yêu cầu. đối số. lấy('tiếp theo')

        nếu không trang_tiếp theo hoặc url_parse(next_page).netloc . = ''.

            trang_tiếp theo = url_for('index')

        trả lại chuyển hướng(trang tiếp theo)

    . . .

Ngay sau khi hàm False2 trả về kết quả là người tiêu dùng đăng nhập thành công, tất cả chúng ta sẽ lấy giá trị của tham số is_authenticated5 trong URL. Flask đáp ứng biến is_authenticated8 với tất cả thông tin được người tiêu dùng nhập vào và gửi qua trình duyệt. Cụ thể là thuộc tính is_authenticated9 trả về tất cả những tham số được thêm vào URL trong từ điển. Có ba kĩ năng cần phải xem xét để quyết định sẽ chuyển hướng tới vị trí bất kỳ sau khi người tiêu dùng đăng nhập thành công

    Nếu URL đăng nhập không còn tham số is_authenticated5, người tiêu dùng sẽ được chuyển hướng tới trang chủ (/index) theo mặc địnhNếu URL đăng nhập có tham số tiếp theo được gán với giá trị là một đường dẫn tương đối (hay nói cách khác là một URL không còn phần miền -tên miền), người tiêu dùng sẽ được chuyển hướng tới URL đóNếu URL đăng nhập có tham số tiếp theo được gán với giá trị là một URL đầy đủ với cả tên miền, người tiêu dùng sẽ được chuyển hướng tới trang chủ của ứng dụng

Trường hợp đầu và trường hợp thứ hai đối tượng dễ hiểu. Trường hợp thứ ba Đảm bảo chắc như đinh cho ứng dụng được bảo mật thông tin hơn. Một người dân có ý định hoàn toàn có thể đặt một URL dẫn đến một trang Web nguy hiểm vào trong tham số tiếp theo, vì như vậy, ứng dụng chỉ chuyển hướng khi gặp đường dẫn tương đối, nhờ đó đảm nói rằng mọi trang Web đều được chuyển đến đồng đều . Để phân biệt những URL tương đối và đầy đủ, tất cả chúng ta sử dụng hàm is_active1 từ thư viện Werkzeug và kiểm tra xem thành phần is_active2 đã có được gán hay là không

Hiển thị người tiêu dùng đã đăng nhập trong bộ sưu tập

Bạn còn nhớ trong Phần 2 tất cả chúng ta đã tạo ra một người tiêu dùng giả để mô phỏng khối mạng lưới hệ thống đăng nhập người tiêu dùng khi thiết kế trang chủ khi tất cả chúng ta chưa tồn tại khối mạng lưới hệ thống này hay là không? . Thay vì người tiêu dùng giả, tất cả chúng ta hoàn toàn có thể sử dụng biến True1 trong bộ sưu tập

ứng dụng/mẫu/chỉ mục. html. Truyền thông tin về người tiêu dùng đang đăng nhập vào mẫu

1

2

3

4

5

6

7

8

% mở rộng "cơ sở. html" %

 

% chặn nội dung %

    Xin chào, current_user. tên tài khoản .

% cho bài đăng trong nội dung bài viết %

    

post. tác giả. tên tài khoản . bài đăng. nội dung

    % endfor %

% chặn kết thúc %

Chúng ta cũng hoàn toàn có thể vô hiệu tham số is_active4 trong những hàm hiển thị

ứng dụng/tuyến đường. py. Không truyền tham số is_active4 đến bộ sưu tập nữa

1

2

3

4

5

@ứng dụng. tuyến đường("https://cunghoidap.com/")

@ứng dụng. tuyến đường('/index')

def index().

    . . .

    return render_template("index. html", tiêu đề='Trang chủ', posts=posts)

Đây là lúc để kiểm tra hiệu suất cao đăng nhập và đăng xuất thao tác thế nào. Bởi vì tất cả chúng ta chưa tồn tại hiệu suất cao đăng ký người tiêu dùng, cách duy nhất để thêm người tiêu dùng vào cơ sở tài liệu là sử dụng chính sách dòng lệnh của Python. Chúng ta hãy khởi đầu bằng phương pháp gọi is_active6 và sử dụng những lệnh sau đây để đăng ký một người tiêu dùng với khối mạng lưới hệ thống

1

2

3

4

>>> u = Người dùng(username='thai', email='[email protected]')

>>> u. set_password('thaipham')

>>> db. phiên. thêm(u)

>>> db. phiên. cam kết()

Bây giờ, nếu bạn chạy ứng dụng và truy cập địa chỉ . //sever cục bộ. 5000/ hoặc . //sever cục bộ. 5000/index, ứng dụng sẽ lập tức chuyển hướng bạn đến trang đăng nhập. Và sau khi đã nhập những thông tin về người tiêu dùng mà bạn đã thêm vào trong cơ sở tài liệu, bạn sẽ được chuyển hướng tới trang mà bạn yêu cầu và một lời chào mừng sẽ được hiển thị

Đăng ký người tiêu dùng

Chức năng ở đầu cuối mà tất cả chúng ta sẽ xây dựng trong nội dung bài viết ngày hôm nay là biểu mẫu đăng ký để người tiêu dùng mới hoàn toàn có thể đăng ký và đăng nhập vào ứng dụng. Chúng ta sẽ cần tạo ra một lớp biểu mẫu web mới trong ứng dụng/biểu mẫu. py

ứng dụng/biểu mẫu. py. biểu mẫu đăng ký người tiêu dùng

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

từ flask_wtf nhập FlaskForm

từ wtforms nhập StringField, PasswordField, BooleanField, SubmitField

từ wtforms. trình xác thực nhập Lỗi xác thực, Bắt buộc tài liệu, E-Mail, EqualTo

từ ứng dụng. quy mô nhập Người dùng

 

.. .

 

class Mẫu đăng ký(FlaskForm):

    tên người tiêu dùng = StringField('Username', validators=[DataRequired()])

    email = StringField('E-Mail', validators=[DataRequired(), Email()])

    mật khẩu = Trường mật khẩu('Password', validators=[DataRequired()])

    password2 = Trường mật khẩu(

        'Lặp lại mật khẩu', trình xác thực=[DataRequired(), EqualTo('password')])

    gửi = Trường gửi('Register')

 

   def validate_username(self, username):

        người tiêu dùng = Người dùng. truy vấn. filter_by(tên người tiêu dùng=tên người tiêu dùng . .tài liệu). đầu tiên()

        nếu người tiêu dùng có không None:

            nâng cao Lỗi xác thực('Vui lòng sử dụng tên người tiêu dùng khác. ')

 

    def validate_email(self, email):

        người tiêu dùng = Người dùng. truy vấn. filter_by(email=email . .tài liệu). đầu tiên()

        nếu người tiêu dùng có không None:

            tăng Lỗi xác thực('Vui lòng sử dụng một email khác . ')

Có vài điểm đáng lưu ý liên quan đến việc kiểm tra tài liệu đầu vào trong biểu mẫu mới này. Đầu tiên, tất cả chúng ta thêm một biến kiểm tra tài liệu (validator) thứ hai bên phía ngoài is_active7 vào trường is_active8. BIến gọi này là E-Mail. Đây là một biến kiểm tra tài liệu có sẵn trong WTForms để đảm nói rằng địa chỉ email do người tiêu dùng nhập vào phù phù phù hợp với định dạng của địa chỉ email

Tiếp theo, tất cả chúng ta cũng tiếp tục lướt theo quy ước chung của những biểu mẫu đăng ký là yêu cầu người tiêu dùng nhập mật mã hai lần để tránh trạng thái nhập sai mật mã bên phía ngoài ý muốn. Vì vậy, chúng tôi sử dụng hai trường is_active9 và is_anonymous0. Trường is_anonymous0 cũng sử dụng một biến kiểm tra có sẵn gọi là is_anonymous2 để đảm nói rằng giá trị đầu vào trường này phải in như giá trị của trường is_active9 đã nhập trước đó

Và ở đầu cuối, tất cả chúng ta cũng luôn có thể có thêm hai hàm mới gọi là is_anonymous4 và is_anonymous5. Khi tất cả chúng ta thêm bất kỳ hàm nào với tên gọi theo mẫu is_anonymous6, WTForms sẽ hiểu những hàm này in như những biến kiểm tra tài liệu tùy biến (trình xác nhận tùy chỉnh) và sử dụng chúng cho những trường tương ứng sau khi sử dụng những hàm này. . Trong trường hợp này, chúng tôi sử dụng những hiệu suất cao kiểm tra tài liệu này để đảm nói rằng những giá trị tên người tiêu dùng và email mà người tiêu dùng nhập vào không tồn tại trong cơ sở tài liệu, vì những truy vấn tài liệu thay thế không được tìm thấy. . Nếu có kết quả trả về, những hàm này sẽ đưa ra một ngoại lệ is_anonymous7. Tham số cho những xác thực ngoại lệ là những thông báo lỗi tương ứng và sẽ được hiển thị cạnh bên những trường này khi tài liệu nhập vào không đúng chuẩn

Để hiển thị biểu mẫu này, tất cả chúng ta cần xây dựng một mẫu HTML. Chúng ta sẽ đưa template này vào file app/templates/register. html. Chúng ta cũng viết mã cho mẫu này tương tự như cho mẫu đăng nhập

ứng dụng/mẫu/đăng ký. html. Mẫu cho biểu mẫu đăng ký người tiêu dùng

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

% mở rộng "cơ sở. html" %

 

% chặn nội dung %

    Đăng ký

    hành vi="" method="post">

hình thức. hidden_tag()

        

             biểu mẫu. tên tài khoản. nhãn

             biểu mẫu. tên người tiêu dùng(size=32)

% cho lỗi trong biểu mẫu. tên tài khoản. lỗi %

            kiểu="color. đỏ;">[ error ]

% endfor %

        

        

             biểu mẫu. e-mail. nhãn

             biểu mẫu. email(size=64)

% cho lỗi trong biểu mẫu. e-mail. lỗi %

            kiểu="color. đỏ;">[ error ]

% endfor %

        

        

             biểu mẫu. mật khẩu mở khóa. nhãn

             biểu mẫu. mật khẩu(size=32)

% cho lỗi trong biểu mẫu. mật khẩu mở khóa. lỗi %

            kiểu="color. đỏ;">[ error ]

% endfor %

        

        

             biểu mẫu. mật khẩu2. nhãn

             biểu mẫu. mật khẩu2(size=32)

% cho lỗi trong biểu mẫu. mật khẩu2. lỗi %

            kiểu="color. đỏ;">[ error ]

% endfor %

        

        

biểu mẫu. gửi()

   

% chặn kết thúc %

Chúng ta cũng cần phải thêm link từ trang đăng nhập đến trang đăng ký để người tiêu dùng mới hoàn toàn có thể đăng ký với khối mạng lưới hệ thống như sau

ứng dụng/mẫu/đăng nhập. html. Liên kết đến trang đăng ký

1

    

Người dùng mới? . href=" url_for('register') ">Click to Register!

Và ở đầu cuối, tất cả chúng ta cần viết hàm hiển thị cho trang đăng ký trong app/routes. py

ứng dụng/tuyến đường. py. Hàm hiển thị cho biểu mẫu đăng ký người tiêu dùng

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

từ ứng dụng nhập db

từ ứng dụng. biểu mẫu nhập Biểu mẫu đăng ký

 

.. .

 

@ứng dụng. tuyến đường('/register', methods=['GET', 'POST'])

def đăng ký().

    if current_user. is_authenticated.

        trả lại chuyển hướng(url_for('index'))

    biểu mẫu = Đơn đăng ký()

    nếu biểu mẫu. validate_on_submit().

        người tiêu dùng = Người dùng(username=form.tên người tiêu dùng. tài liệu, email=biểu mẫu . .email. tài liệu)

        người tiêu dùng. set_password(biểu mẫu. mật khẩu. tài liệu)

        db. phiên. thêm(người tiêu dùng)

        db. phiên. cam kết()

        flash('Xin chúc mừng, bạn hiện là người tiêu dùng đã đăng ký. ')

        trả lại chuyển hướng(url_for('login'))

    return render_template('register. html', tiêu đề='Đăng ký', form=form)

Trong hàm này, tất cả chúng ta làm một số trong những việc tuân theo tuần tự như sau. đảm nói rằng những người dân tiêu dùng đã đăng ký không thể truy cập trang này (cách xử lý tương tự như khi một người tiêu dùng đã đăng nhập tìm cách truy cập trang đã đăng nhập). Tiếp theo, tất cả chúng ta sẽ kiểm tra những tài liệu đã đăng ký có hợp lệ hay là không, nếu không còn lỗi (được xác nhận thông qua điều kiện is_anonymous8), tất cả chúng ta sẽ tạo một người tiêu dùng mới với những giá trị của tên người tiêu dùng, email và mật khẩu

Mã đăng nhập python

Với những thay đổi này, người tiêu dùng sẽ hoàn toàn có thể tạo tài khoản người tiêu dùng, đăng nhập và đăng xuất. Hãy thử tất cả những vấn đề có lỗi để hiểu cách thao tác của mã kiểm tra lỗi mà tất cả chúng ta đã thêm vào chương trình. Chúng ta sẽ quay lại với khối mạng lưới hệ thống xác nhận người tiêu dùng và hiệu suất cao tương hỗ update để người tiêu dùng hoàn toàn có thể đặt lại mật mã trong trường hợp họ đã quên trong một nội dung bài viết sau. Nhưng giờ đây, tất cả chúng ta hãy chuyển sang phần khác của ứng dụng

Tải thêm tài liệu liên quan đến nội dung bài viết Mã đăng nhập python programming python

Video Mã đăng nhập python ?

Bạn vừa tham khảo tài liệu Với Một số hướng dẫn một cách rõ ràng hơn về Review Mã đăng nhập python tiên tiến nhất

Chia Sẻ Link Down Mã đăng nhập python miễn phí

You đang tìm một số trong những Share Link Down Mã đăng nhập python Free.

Giải đáp thắc mắc về Mã đăng nhập python

Nếu sau khi đọc nội dung bài viết Mã đăng nhập python vẫn chưa hiểu thì hoàn toàn có thể lại Comments ở cuối bài để Ad lý giải và hướng dẫn lại nha #Mã #đăng #nhập #python