我很困惑如何在 DRF 中的序列化器和视图中实现方法:
我有一个扩展 AbstractBaseUser 的帐户模型。视图集如下所示:
class AccountViewSet(viewsets.ModelViewSet):
lookup_field = 'username'
queryset = Account.objects.all()
serializer_class = AccountSerializer
def get_permissions(self):
if self.request.method in permissions.SAFE_METHODS:
return (permissions.AllowAny(), TokenHasReadWriteScope())
if self.request.method == 'POST':
return (permissions.AllowAny(), TokenHasReadWriteScope())
return (permissions.IsAuthenticated(), IsAccountOwner(), TokenHasReadWriteScope())
def create(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
Account.objects.create_user(**serializer.validated_data)
return Response(serializer.validated_data, status=status.HTTP_201_CREATED)
return Response({
'status': 'Bad request',
'message': 'Account could not be created with received data.'
}, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
像这样的序列化器:
class AccountSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True, required=False)
confirm_password = serializers.CharField(write_only=True, required=False)
class Meta:
model = …Run Code Online (Sandbox Code Playgroud) 我在 Outlook 2013 的 VSTO 插件中弹出了一个对话框。我测试了 DialogResult.Yes 和 No,我已经将两个按钮的结果设置为它们。它们工作正常,但是当用户开箱即用时,我想要另一种行为。当他们按下取消时,代码会继续。如果他们取消对话框,我可以调用什么来阻止加载项的执行?如何测试取消按钮?我试过了,res == DialogResult.Cancel 但它不能将 res 转换为 bool 并且它是 DialogResult 类型,因为我还测试了 Yes 和 No。
我如何知道他们是否按下了取消按钮,以及如何退出插件。在 python 中,命令是sys.exit()什么 C# 等价物?
我有一个Outlook 2013 VSTO 插件。我想将我创建的saveFileDialog居中。为此,您需要向其传递Window父级的对象。我不确定 和IWin32Window是否Window相同,但这就是我所拥有的。
public IWin32Window getWindowHandle()
{
dynamic activeWindow = Globals.ThisAddIn.Application.ActiveWindow();
IntPtr outlookHwnd = new OfficeWin32Window(activeWindow).Handle;
IWin32Window win = Control.FromHandle(outlookHwnd);
return win;
}
Run Code Online (Sandbox Code Playgroud)
该SaveFileDialog.ShowDialog(Window)方法需要一个窗口。我可以通过吗IWin32Window?除了 之外,还有其他方法可以Window从处理程序获取对象吗Control.FromHandle?
任何批评都将受到欢迎。
谢谢
编辑:
哦,还有该函数的辅助类:
public class OfficeWin32Window : IWin32Window
{
[DllImport("user32")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
IntPtr _windowHandle = IntPtr.Zero;
public IntPtr Handle
{
get { return _windowHandle; }
}
public OfficeWin32Window(object …Run Code Online (Sandbox Code Playgroud) 我有一个在设计器中看起来像这样的表单,两个网格视图,完全相同的属性。它工作了一段时间,但是现在当我调整它的大小时,只有正确的网格视图水平扩展,它们都垂直扩展。锁定表单和控件也不会阻止我调整表单大小,这是最简单的解决方案。
是什么原因造成的?网格视图上唯一相关的属性是每个视图的上,右,左,下锚。请参阅底部的代码。
以下是一些屏幕截图:
这是Designer中的表单:

这是我尝试调整大小时的表格:

如您所见,右半部分更宽,我也无法正常调整其大小,因为我尝试对角线调整大小主要是垂直增长,而水平调整大小也可以做到这一点。我永远都遇到过调整大小的问题,但是最初两个gridview的大小都是一样的,我没有做任何更改,他们停了下来。我在这里想念什么吗?为什么不锁定表单会阻止其调整大小?我也锁定了每个控件。
以防万一,下面是设计器中网格视图的代码,首先是正确的代码:
// clientHistoryTableDataGridView
//
this.clientHistoryTableDataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.clientHistoryTableDataGridView.AutoGenerateColumns = false;
this.clientHistoryTableDataGridView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
this.clientHistoryTableDataGridView.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
this.clientHistoryTableDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.clientHistoryTableDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.dataGridViewTextBoxColumn4,
this.dataGridViewTextBoxColumn5,
this.dataGridViewTextBoxColumn6});
this.clientHistoryTableDataGridView.DataSource = this.clientHistoryTableBindingSource;
this.clientHistoryTableDataGridView.Location = new System.Drawing.Point(426, 52);
this.clientHistoryTableDataGridView.Name = "clientHistoryTableDataGridView";
this.clientHistoryTableDataGridView.RowHeadersVisible = false;
this.clientHistoryTableDataGridView.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.clientHistoryTableDataGridView.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.clientHistoryTableDataGridView.Size = new System.Drawing.Size(430, 360);
this.clientHistoryTableDataGridView.TabIndex = 4;
this.clientHistoryTableDataGridView.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.clientHistoryTableDataGridView_CellContentClick);
Run Code Online (Sandbox Code Playgroud)
和左侧:
// clientTableDataGridView
//
this.clientTableDataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left) …Run Code Online (Sandbox Code Playgroud) 我有这个 C# 代码:
public ExpenseReportPage()
{
InitializeComponent();
}
// Custom constructor to pass expense report data
public ExpenseReportPage(object data) : this()
{
// Bind to expense report data
this.DataContext = data;
}
Run Code Online (Sandbox Code Playgroud)
当我使用传递的对象调用构造函数时究竟会发生什么?我似乎无法掌握事件链。如果你要传递一个对象,它也会调用另一个构造函数,无论如何?
假设您有三个构造函数,其中两个带有this(). 调用其中任何一个会调用构造函数this()吗?我错过了什么吗?据我了解,这只是强调 DRY 的构造函数重载。
本质上,它总是调用默认值?
在我的想法中进行一些验证/更正将有巨大的帮助。
谢谢
编辑:
如果没有要传递的 lName(第三个参数),它如何调用构造函数?
class Student {
string _studentType = "";
string _id = "";
string _fName = "";
string _lName = "";
public Student(string id)
: this(id, "", "") {
}
public Student(string id, string fName) …Run Code Online (Sandbox Code Playgroud) 我发现很多类似的问题,对此没有好的答案。我有一个仪表板,用户可以在其中上传文件,并显示他们上传的文件。我希望他们能够单击和图标或文件名并下载。现在,它会在浏览器中打开文件,对于图像和pdf而言,这不是问题,因为您可以从那里保存。但是,如果您拥有docx,二进制文件或zip文件,则需要一个下载链接,即使有pdf和图像,也很好。
这是我的观点,请忽略注释掉的部分:
@login_required(login_url='/dashboard-login/')
def dashboard(request):
current_user = request.user
current_client = request.user.client
files = ClientUpload.objects.filter(client=current_client)
if request.method == 'POST':
if request.FILES is None:
return HttpResponseBadRequest('No Files Attached.')
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
#dz_files = request.FILES
#for f in dz_files:
# new_file = ClientUpload(client=current_client, file_upload=f)
# new_file.save()
# logger = logging.getLogger(__name__)
# logger.info("File uploaded from " + current_client.company)
newfile = ClientUpload(client=current_client, file_upload=request.FILES.get('file_upload'))
newfile.save()
logger = logging.getLogger(__name__)
logger.info("File uploaded from " + current_client.company)
else:
logger = logging.getLogger(__name__)
logger.warning("Upload Failed")
return HttpResponseRedirect(reverse('dashboard'))
else: …Run Code Online (Sandbox Code Playgroud) 在VSTO Outlook 2013插件中,我使用此方法来获取发件人的电子邮件地址:
Inspector currentObject = Globals.ThisAddIn.Application.ActiveInspector();
Object currentItem = currentObject.CurrentItem;
MailItem message = currentItem as MailItem;
string senderMailAddress = message.SenderEmailAddress;
Run Code Online (Sandbox Code Playgroud)
除了在某些情况下,这总是很好用。我得到的字符串是他们的电子邮件地址。但是,如果发件人与使用该插件的人位于同一域中,那么我会得到一个字符串,其中包含一堆随机字符,反斜杠和不带大写字母的域的电子邮件地址。
示例:如果发件人是person@example.com,并且使用插件的人也是what@example.com(同一域)
我会得到类似:7GXaaJD \ 3x5FDd \ PERSON的信息,而不是普通的电子邮件地址字符串。
我在文档中的某处读到(似乎无法再次找到它),当发件人位于同一域中时,它将返回此字符串而不是正常的电子邮件地址,我不确定为什么,但是如何获取即使它们都属于同一个域,也将其转换为普通的电子邮件地址。还是有另一种方法来解决此问题,因为对我而言,为什么它起作用才是有意义的。如果有人碰巧知道背后的原因,我很想听听。但这不是我的问题。
编辑:
找到了这个,https: //msdn.microsoft.com/zh-cn/library/office/ff869674.aspx引用MailItem.SenderEmailType属性。如果EX是同一组织中的交换服务器,则该选择。因此,我可以进行测试以查看是否会得到该字符串或正常的电子邮件字符串(如果类型为SMTP)。
该示例似乎可以回答我的问题,但是它在VB中,并且在将其转换为C#时遇到了一些麻烦。我看到我可以从MailItem对象获取AddressEntry,然后使用x = GetExchangeUser()再做一次x.PrimarySMTPAdress来获取地址。但是我不确定这是否正确。
如果有人拥有有关SenderEmailType的任何信息并与同一域中的交换用户打交道,那么任何建议都将大有帮助。
谢谢。