Tải thông tin đăng nhập từ tệp python

Để giải thích thêm về câu hỏi của tôi, hãy tưởng tượng bạn đang làm việc trên một dự án Python cần mật khẩu để kết nối với cơ sở dữ liệu hoặc "bí mật ứng dụng khách" để kết nối với dịch vụ web. Đâu là nơi tốt nhất để lưu trữ thông tin đó để bạn không vô tình chia sẻ nó khi phân phối mã?

Show

Mẫu phổ biến nhất mà tôi từng thấy là nhúng nó trực tiếp vào tập lệnh Python, nhưng sau đó để trống, kèm theo nhận xét để bạn điền vào

consumer_secret='' #Fill this in with your own credentials

Đến từ PHP, phương pháp tiêu chuẩn là lưu trữ thông tin đăng nhập dưới dạng các biến trong một tệp riêng biệt, sau đó nhập vào tập lệnh. Bằng cách đó, bạn có thể dễ dàng "gitignore" tệp đó, nhưng tôi không thấy điều này thường xuyên trong Python

câu trả lời

tầng 1

belak51 belak 13 điểm·4 năm trước· đã chỉnh sửa 4 năm trước

Trong trường hợp này, tôi nghĩ rằng nó phụ thuộc vào ứng dụng. Có một vài loại ứng dụng chính khác nhau (ít nhất là những loại mà tôi viết)

  1. Dịch vụ web, được viết bằng bình, django hoặc một số khung khác. Đối với những thứ này, tôi thường sử dụng các biến môi trường, sau đó tải tất cả chúng vào một cấu hình. py, hoặc một cái gì đó như thế. Ví dụ: Consumer_secret = os. environ['SECRET'] sẽ tải môi trường var SECRET vào biến đó. Nó có thêm lợi thế là đưa ra lỗi nếu biến không được đặt, giúp dễ dàng tìm thấy nội dung mà không phải tất cả các tùy chọn đều được định cấu hình. Điều này làm cho nó đơn giản để triển khai. Heroku chuyển hầu hết các thông tin dịch vụ khác của nó thông qua các biến môi trường, vì vậy bạn thậm chí có thể sử dụng các công cụ của họ để chạy các dự án của mình ngay cả khi bạn không sử dụng heroku. Nếu bạn muốn làm điều này, bạn cần một cái gì đó như forego hoặc foreman. Sau đó, bạn có thể thực hiện một. env với SECRET=*. )(8sdoaiu09109u09, một Procfile với web. lệnh để khởi động ứng dụng của bạn và ứng dụng của bạn sẽ bắt đầu với foreman start. Bạn cũng có thể chạy các lệnh tùy ý bằng lệnh run foreman tại đây

  2. Công cụ đối mặt với người dùng. Đối với những điều này, python có trình phân tích cú pháp tệp cấu hình dựng sẵn. Tôi đã không sử dụng nó quá nhiều, nhưng từ những gì tôi có thể nói, nó khá dễ sử dụng. Khi bạn có một tệp để lưu trữ nó, bạn có thể tách cấu hình theo từng phần và nếu phần không tạo, bạn có thể điền vào đó và lưu tệp. Bạn cũng có thể sử dụng cờ dòng lệnh để tải tệp cấu hình riêng nếu muốn với argparse

  3. công cụ nội bộ. Một trong các tùy chọn trước đó hoạt động. Nó thực sự tập trung vào sở thích cá nhân vào thời điểm này

Hi vọng điêu nay co ich

  • CHỈNH SỬA. định dạng
  • CHỈNH SỬA 2. Đã thêm thông tin argparse
  • CHỈNH SỬA 3. Chỉ cần nhận thấy bình luận của bạn về việc để lại một mẫu trống. Điều này là xấu vì một số lý do. Đầu tiên, nếu thứ gì đó được thêm vào mẫu cấu hình và sau đó được đẩy, người dùng sẽ không phải cập nhật cấu hình của họ, vì vậy có khả năng bạn sẽ không gặp sự cố cho đến khi họ chạy chương trình (nếu bạn sử dụng nhập . một cái gì đó trong mã, sẽ có lỗi). Việc nắm bắt các sự cố cấu hình khi khởi động sẽ dễ dàng hơn nhiều. Thứ hai, nếu bạn muốn chạy nhiều phiên bản của chương trình, bạn cần có một bản sao mã riêng

Tầng 1 Trả lời

mecer22 1 điểm· 4 năm trước

Tôi chưa bao giờ nghĩ đến việc lưu trữ thông tin đó dưới dạng các biến môi trường. ý tưởng gọn gàng

tầng 2

kroe761 8 điểm·4 năm trước·đã chỉnh sửa 4 năm trước

Tôi thích sử dụng ConfigParser. Bạn sẽ tạo một tệp cấu hình và lưu trữ nó ở một nơi khác mà bạn có thể chỉnh sửa dễ dàng/khó khăn như bạn muốn (như thư mục vv). nó sẽ giống như

[configuration]
password = 11111

và sau đó, trên tập lệnh python thực tế của bạn, bạn sẽ nhập dữ liệu đó như thế này

import ConfigParser
config = ConfigParser.ConfigParser()
config.read("/etc/config.txt")
pass = config.get("configuration","password")

và sau đó biến của bạn vượt qua bây giờ có mật khẩu. Đẹp và sạch sẽ

Tầng 2

lucidguppy 1 điểm· 4 năm trước

Điều này thật tuyệt vì bạn có thể tiếp tục gỡ lỗi. txt trong kiểm soát nguồn - và thay thế nó bằng tệp của riêng bạn

dạyMe 4 điểm· 4 năm trước

Chỉ cần lưu ý rằng vượt qua là một từ khóa ngôn ngữ và ngay cả khi có thể, bạn sẽ không muốn bỏ qua các từ khóa, như một thói quen lập trình

tầng 3

4 năm trước Đối với một giải pháp rất đơn giản, hãy tạo một tệp Python, chẳng hạn như thông tin đăng nhập. py, trong cùng thư mục với tập lệnh của bạn. Viết từ điển với mật khẩu của bạn, như thế này

login = {
    'password' : 'YOUR_PASSWORD',
    'consumer_secret' : 'YOUR_SECRET'
}

và như thế. Sau đó, trong tập tin kịch bản của bạn

import credentials

consumer_secret = credentials.login['consumer_secret']

Đảm bảo rằng bạn giữ tệp thông tin đăng nhập của mình không bị sửa đổi. Gitignore nếu cần

tầng 4

Samus_git2samus 3 điểm· 4 năm trước

những gì mọi người Django thường làm là có một tập lệnh Python (thường được gọi là local_settings. py) được loại trừ rõ ràng khỏi kho lưu trữ và nó được nhập vào tệp cài đặt thực được theo dõi

tầng 4

shidarin shidarin 2 điểm·4 năm trước

Vâng, tôi sử dụng một cấu hình. ini chứa cả thông tin đăng nhập và cài đặt thông thường. Sau đó, tôi thêm cấu hình đó. ini thành git bỏ qua và một sample_config trống. ini không có giá trị cho repo

tầng 5

n8henrie n8henrie 1 điểm· 4 năm trước

Nếu nó chỉ là một kịch bản để sử dụng cá nhân, tôi thực sự thích keyring. Giao diện với Keychain. ứng dụng trên máy Mac của tôi, có giao diện rất thân thiện với người dùng và hãy để tôi sử dụng một my_pass = keyring.get_password('reddit', 'n8henrie') đơn giản